将ISNULL合并到CASE表达式中

And*_*rew -2 isnull sql-server-2008

我有以下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
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 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
Run Code Online (Sandbox Code Playgroud)

如果要使用,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
Run Code Online (Sandbox Code Playgroud)

或者您可以使用COALESCE替换第一个CASE:

COALESCE([2010], 0)
* 
CASE 
  WHEN IsNumeric([Dur_In_Hours]) =1 
  THEN CAST([Dur_In_Hours] AS FLOAT) 
  ELSE 0 
END AS Cost
Run Code Online (Sandbox Code Playgroud)