【问题标题】:Derived Column to handled mulitple conditions in CASE statement?派生列在 CASE 语句中处理多个条件?
【发布时间】:2022-01-24 22:17:04
【问题描述】:

我有一个有效的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"

但它也没有用。

【问题讨论】:

    标签: sql sql-server ssis etl derived-column


    【解决方案1】:

    您的表达式需要添加一个最终的 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)
    

    【讨论】:

    • 列的类型是tiny int
    • @chaneb 有什么新东西吗?为什么你没有勾选这个答案?
    • @chaneb 派生列输出类型是 string 确保您没有将其映射到数字目标列。
    • @Hadi 再问一个问题。我的目标列类型是 tinyint。我正在尝试将 DT_WSTR 数据放入 tinyint 数据中。我该怎么解决这个问题?我尝试使用 DT_UI1 进行投射,但没有成功!
    • 我非常感谢你带来的一切。我真的很感谢你的辛勤工作
    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多