以下は私の構文です。私は特定のcallIDのHeatSeqのためにassg.Hours_Act <> Sum(assh.HourEntry)
の行だけを返そうとしています。変換/キャストはできません。さらに精度の高い問題
私のこれまでの記述では、私がこれをどのように試みているか見ることができますが、これまで試みてきた変換はありませんでした。
SELECT assg.CallID, assg.HEATSeq, assg.Hours_Act, SUM(assh.HourEntry) AS HourSum
FROM Heat.Dbo.asgnmnt AS assg
INNER JOIN heat.dbo.Assignment_Hours AS assh
ON assg.CallID = assh.CallID AND assg.HEATSeq = assh.HEATSeq
WHERE assg.Hours_Act IS NOT NULL
GROUP BY assg.callid, assg.HEATSeq, assg.Hours_Act
HAVING assg.Hours_Act <> CONVERT(VARCHAR(10),SUM(assh.HourEntry))
問題は、SUMの精度がHours_Act
にあるものとは異なる値を作成しています。 assg.Hours_Act
はVARCHAR
で、合計(assh.HourEntry)は以下DECIMAL
を返すあなたが問題を見ることができる私の結果のスクリーンショットです:
EDIT:最終ワーキングコード:
SELECT assg.CallID, assg.HEATSeq, assg.Hours_Act, SUM(assh.HourEntry) AS HourSum
FROM Heat.Dbo.asgnmnt AS assg
INNER JOIN heat.dbo.Assignment_Hours AS assh
ON assg.CallID = assh.CallID AND assg.HEATSeq = assh.HEATSeq
WHERE assg.Hours_Act IS NOT NULL AND ISNUMERIC(assg.Hours_Act) = 1
GROUP BY assg.callid, assg.HEATSeq, assg.Hours_Act
HAVING CONVERT(DECIMAL(10,2), assg.Hours_Act) <> CONVERT(DECIMAL(10,2), SUM(assh.HourEntry))
これはチケットだったので、そこには私の変換を爆破していたいくつかの迷惑データがあったに違いない...私のスクリプトからわかるように、私はすでにwhere句のNOT NULLを使ってこれを説明しようとしましたが、私のために完全に!実際に@antisanityも部分的に正しいので、データが確かに数値であれば変換が必要です。あなたの両親にあなたを愛してください! –