在CASE语句中处理多个条件的派生列?

2022-03-31 00:00:00 sql etl sql-server ssis derived-column

我有一个CASE语句可以用,但因为我必须在SSIS中执行,所以我感到困惑:

SELECT [BPCNUM_0], TYPE,

CASE

    WHEN [TYPE]=1 THEN 'Normal'
    WHEN [TYPE]=2 THEN 'Divers'
    WHEN [TYPE]=3 THEN 'Intra-Société'
    WHEN [TYPE]=4 THEN 'Prospect'
END AS TYPE
FROM table

如您所见,Case语句计算一列中的值,并根据它们是什么重命名它们。 当我在SSIS上尝试此功能时,它不起作用

[TYPE] == 1 ? "Normal" : [TYPE] == 2 ? "Divers" : [TYPE] == 3 ? "Intra-Société" : [TYPE] == 4 ? "Prospect"

我也试过

[TYPE] == "1" ? "Normal" : [TYPE] == "2" ? "Divers" : [TYPE] == "3" ? "Intra-Société" : [TYPE] == "4" ? "Prospect"

但它也没有起作用。


解决方案

您的表达式需要添加最后一个Else语句,因为它应该知道在验证上述条件时要赋值的值:

[TYPE] == 1 ? "Normal" : 
[TYPE] == 2 ? "Divers" : 
[TYPE] == 3 ? "Intra-Société" : 
[TYPE] == 4 ? "Prospect" : ""

相当于SQL中的以下内容:

SELECT [BPCNUM_0], TYPE,

CASE

    WHEN [TYPE]=1 THEN 'Normal'
    WHEN [TYPE]=2 THEN 'Divers'
    WHEN [TYPE]=3 THEN 'Intra-Société'
    WHEN [TYPE]=4 THEN 'Prospect'
    ELSE ''
END AS TYPE
FROM table

如果您需要赋值NULL而不是空字符串,可以使用以下表达式(假设派生的列类型为DT_WSTR):

[TYPE] == 1 ? "Normal" : 
[TYPE] == 2 ? "Divers" : 
[TYPE] == 3 ? "Intra-Société" : 
[TYPE] == 4 ? "Prospect" : NULL(DT_WSTR,50)

相关文章