-2

次の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
4

2 に答える 2

5

残念ながら、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
于 2013-01-24T14:57:00.187 に答える
2

CASEステートメントではなく式です。それは微妙なニッチピックですが、区別は重要です、IMHO。

私はあなたが意味したと思います:

CASE WHEN [2010] IS NULL THEN 0 END

しかし、そこに 2010 をハードコーディングしていて、後で変数または列名を使用する予定がない限り、それはまったく意味がありません。

ISNULLあなたが求めているものとはまったく異なるものです(少なくとも私が知る限り). Access と同じようには機能しません。そのため、ほとんどの場合、同様に機能する代わりに、通常はお勧めします。COALESCE私は昨年、差別化を助けるためにこのヒントを書きました。

于 2013-01-24T14:56:53.620 に答える