-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()功能错误。如果您正在测试列是否为空,那么您将使用:

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是一个表达式,而不是一个语句。这是一个微妙的挑剔,但区别很重要,恕我直言。

我想你的意思是:

CASE WHEN [2010] IS NULL THEN 0 END

但这根本没有任何意义,除非您在那里对 2010 进行硬编码,但计划稍后使用变量或列名。

ISNULL与您所追求的完全不同(至少据我所知)。它的工作方式与在 Access 中的工作方式不同。出于这个原因,我通常推荐COALESCE它,在大多数情况下它的功能相似。我去年写了这个技巧来帮助区分:

于 2013-01-24T14:56:53.620 回答