【问题标题】:T-SQL Case statement where value is derived from joining tablesT-SQL Case 语句,其中值来自连接表
【发布时间】:2014-05-02 08:20:21
【问题描述】:

我有以下简单查询(sql server 2012)

SELECT T.[taskId], T.[sectionId], T.[DateAdded]
FROM [TASK] AS T 
WHERE (T.[deleted] = 0)
ORDER BY T.[DateAdded]

我想做的是创建一个名为type 的计算列,如果SectionId 为空,它将为1。如果不是null,这将包含一个foreign key 用于一个名为Organisationtable。组织有一个称为类型的列。如果组织中连接行的类型是 6,那么我计算的类型值应该是 2,否则它将是 3。

我猜CASE 会是理想的选择,但我不知道该怎么做。

【问题讨论】:

    标签: sql sql-server tsql case


    【解决方案1】:

    要投影派生列,请将连接添加到您的组织表并根据各种值派生新列:

    SELECT T.[taskId], T.[sectionId], T.[DateAdded],
       CASE 
          WHEN SectionId IS NULL THEN 1
          WHEN o.[type] = 6 THEN 2
          ELSE 3
       END AS [type]
    FROM [TASK] AS T 
       -- Applicable join condition goes here ...
       LEFT OUTER JOIN Organisation o ON t.TaskID = o.TaskID
    WHERE (T.[deleted] = 0)
    ORDER BY T.[DateAdded]
    
    如果你**字面上**想要一个计算列,它看起来像这样: ALTER TABLE TASK ADD [类型] AS 案子 当 SectionId 为 NULL THEN 1 WHEN (SELECT [type] FROM Organization WHERE ... JOIN KEY) = 6 THEN 2 其他 3 结尾;

    【讨论】:

    • 非常感谢,不过我不想实际更改表结构。只需将其作为计算列返回
    • Apols - 我关注 COMPUTED 并按字面意思理解 :)
    猜你喜欢
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多