varcharフィールドを10進数に変換するCTEクエリがあります。 しかし、CTE後のSELECT
では、返される値を制限したいと思います。私はSQL算術オーバーフローエラーwhere句の値を制限するときにvarcharを10進数に変換するエラー
arthimeticオーバーフローエラー
を得るとき これはこれは、クエリです:
;WITH CTE
AS
(
SELECT PP.PatientProfileID,
ROUND(CAST(CASE WHEN ISNUMERIC(O.Value) = 1 THEN O.Value END AS DECIMAL(4, 1)), 1) AS BmiValue
FROM PatientProfile PP RIGHT OUTER JOIN Encounter E1 ON PP.PatientProfileID = E1.PatientProfileID
JOIN Procedures P on E1.PatientEncounterID = P.PatientEncounterID
JOIN Observation O ON O.PatientProfileID = E1.PatientProfileID
WHERE P.CPTCode = '3008F' AND
O.Term = 'BMI' AND O.Value IS NOT NULL
)
SELECT *
FROM CTE
WHERE BmiValue >= 18.5 AND BmiValue < 25.0
私はちょうどにwhere句制限:WHERE BmiValue >= 18.5
誤りがないし。 WHERE BmiValue < 25.0
のみを使用するとエラーは発生しません。 両方の式を使用する場合のみ、算術オーバーフローエラーが発生します。
クエリに問題がありますか?
更新 私のコメントで述べたように、私はSQL Server 2008 R2を使用しています。 10進値のCTEのヌルを除去します。 WHERE
句を削除すると、BmiValue
のすべての値が10進値として表示されます。
私はこのWHERE
句にBmiValues
の選択を狭める場合: WHERE (BmiValue >= 18.5) AND (BmiValue < 30.0)
何の算術オーバーフローエラーがありません。 最大値をこれに変更すると、次のようになります。 WHERE (BmiValue >= 18.5) AND (BmiValue < 29.0)
算術オーバーフローエラー...異常です。
どのバージョンのSQL Serverを使用していますか? – SqlZim
これは "P"というエイリアスを持つ2つのテーブルでどのように動作しますか? –
@JacobHデータベースが大文字と小文字を区別する照合を使用している場合、それらは実際は異なる別名です。 –