CASE语句不适用于NA/NULL值

yrdbyhpb  于 2022-10-03  发布在  其他
关注(0)|答案(1)|浏览(164)

列: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
omhiaaxx

omhiaaxx1#

CASE表达式返回标量值,该数据的数据类型由data type precedence确定。在CASE表达式中,有3个e1d2d1返回数值(int),2个返回varchar(2)。因为int具有比varchar更高的优先级,所以将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;

相关问题