列:CompFreq(Nvarchar 255)、CompTotal(Nvarchar 255)
1.不同的CompFreq有每月、每年、每周、NA。
1.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
1条答案
按热度按时间omhiaaxx1#
CASE
表达式返回标量值,该数据的数据类型由data type precedence确定。在CASE
表达式中,有3个e1d2d1返回数值(int
),2个返回varchar(2)
。因为int
具有比varchar
更高的优先级,所以将varchar
转换为int
,并且(显然)'NA'
不是有效的int
值。只需从
CASE
表达式中省略'NA'
值,并返回NULL
即可。如果您希望显示'NA'
,请在表示层而不是SQL层中处理: