次のCASE
式があり、そのISNULL
部分が登録されていません:
CASE WHEN IsNull(2010) THEN 0 END) *
CASE WHEN IsNumeric([Dur_In_Hours]) = 1 THEN
CAST([Dur_In_Hours] AS FLOAT) ELSE 0 END) AS Cost
次のCASE
式があり、そのISNULL
部分が登録されていません:
CASE WHEN IsNull(2010) THEN 0 END) *
CASE WHEN IsNumeric([Dur_In_Hours]) = 1 THEN
CAST([Dur_In_Hours] AS FLOAT) ELSE 0 END) AS Cost
残念ながら、IsNull()
関数の使い方が間違っています。列が null かどうかをテストする場合は、次を使用します。
CASE
WHEN 2010 is null
THEN 0
END
*
CASE
WHEN IsNumeric([Dur_In_Hours]) =1
THEN CAST([Dur_In_Hours] AS FLOAT)
ELSE 0
END AS Cost
使用したい場合は、その式を置き換えるためにIsNull()
使用できます。IsNull([2010], 0)
CASE
IsNull([2010], 0)
*
CASE
WHEN IsNumeric([Dur_In_Hours]) =1
THEN CAST([Dur_In_Hours] AS FLOAT)
ELSE 0
END AS Cost
COALESCE
または、最初のものを置き換えるために使用できますCASE
:
COALESCE([2010], 0)
*
CASE
WHEN IsNumeric([Dur_In_Hours]) =1
THEN CAST([Dur_In_Hours] AS FLOAT)
ELSE 0
END AS Cost
CASE
ステートメントではなく式です。それは微妙なニッチピックですが、区別は重要です、IMHO。
私はあなたが意味したと思います:
CASE WHEN [2010] IS NULL THEN 0 END
しかし、そこに 2010 をハードコーディングしていて、後で変数または列名を使用する予定がない限り、それはまったく意味がありません。
ISNULL
あなたが求めているものとはまったく異なるものです(少なくとも私が知る限り). Access と同じようには機能しません。そのため、ほとんどの場合、同様に機能する代わりに、通常はお勧めします。COALESCE
私は昨年、差別化を助けるためにこのヒントを書きました。