CASE 语句不适用于 NA / 空值



列:CompFreq(nvarchar 255(,CompTotal(nvarchal 255(

  1. 不同的CompFreq有月度、年度、每周、NA
  2. CompTotal有数字,NA

我想将每月和每周的CompTotal(总薪酬(转换为每年,如果CompFreq或CompTotal列中有"NA",则将值保留为"NA"。但我收到以下错误消息。"将varchar值"NA"转换为数据类型int时转换失败;有什么办法吗?谢谢

SELECT
(CASE 
WHEN CompFreq = 'Monthly' THEN CompTotal * 12
WHEN CompFreq = 'Weekly' THEN CompTotal * 52
WHEN CompFreq = 'Yearly' THEN CompTotal
WHEN CompFreq = 'NA' THEN 'NA'
WHEN CompTotal = 'NA' THEN 'NA'
END)
as YearlyTotalComp
FROM Project_Table

CASE表达式返回标量值,该数据的数据类型由数据类型优先级决定。在CASE表达式中,有3个返回数值(int(的THEN和2个返回varchar(2)。由于int具有更高的优先级,因此varchar被转换为int,并且(显然('NA'而不是有效的int值。

只需从CASE表达式中省略'NA'值,并返回NULL。如果您希望显示'NA',请在您的表示层而不是SQL层中处理:

SELECT CASE WHEN CompFreq = 'Monthly' THEN CompTotal * 12
WHEN CompFreq = 'Weekly' THEN CompTotal * 52
WHEN CompFreq = 'Yearly' THEN CompTotal
--Will implicitly return NULL if no WHENs are true
END AS YearlyTotalComp
FROM dbo.Project_Table;

最新更新