2012-01-19 10 views
0

以下は私の構文です。私は特定の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_ActVARCHARで、合計(assh.HourEntry)は以下DECIMAL

を返すあなたが問題を見ることができる私の結果のスクリーンショットです: enter image description here

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)) 

答えて

2

@antisanityは正しいです。また、assg.Hours_Actが数値でない行を除外することもできます。不正なデータが格納されていると、変換の問題が発生している可能性があります。ちょうどあなたのWHERE句に追加します。

AND ISNUMERIC(assg.Hours_Act) = 1 

代わりに、あなたはちょうどあなたが掃除を必要とする任意の不良データを持っている場合= 0 ISNUMERICを参照するには、ソースデータに選択することができます。

+0

これはチケットだったので、そこには私の変換を爆破していたいくつかの迷惑データがあったに違いない...私のスクリプトからわかるように、私はすでにwhere句のNOT NULLを使ってこれを説明しようとしましたが、私のために完全に!実際に@antisanityも部分的に正しいので、データが確かに数値であれば変換が必要です。あなたの両親にあなたを愛してください! –

1

代わりにvarcharの値assg.Hours_Actを10進数にキャストしてください。

cast(assg.Hours_Act as decimal(10,2)) <> sum(assh.HourEntry) 

あなたは空白を持っているなら、あなたは試してみてください:

cast(assg.Hours_Act as float) <> sum(assh.HourEntry) 
+0

私はこの正確な構文を試していますが、私は10進数にも変換しようとしましたが、エラーが発生しました。 varcharを数値に変換する。 –

+0

あなたがそこにあるデータによって異なります。代わりに 'float'にキャストしようとすることができます。私が見た限りでは、 'varchar'変換でもっと寛容です。 – canon

+0

ヘルプantisantiyありがとう!デイブの答えは、私が持っていた根本的な問題をクリアしましたが、私はあまりにもしようとしていたが、まだ変換エラーを取得していたので、大きな+1を与えた。それは本当にここの複合的な努力でした!ありがとうございました! –

関連する問題