列:CompFreq(nvarchar 255(,CompTotal(nvarchal 255(
- 不同的CompFreq有月度、年度、每周、NA
- 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;