小编典典

T-SQL CASE语句依赖于同一SELECT查询中的另一个CASE语句

sql

我有一个SELECT查询,其中第二条CASE语句的结果可以取决于第一条CASE语句的结果-类似于:

SELECT      ..., 
            CASE 
                WHEN dbo.Table1.Description LIKE '%car%' THEN 'Car'
                WHEN ... 
                ELSE 'Unclassified'
            END AS Product, 
            CASE 
                WHEN dbo.Table2.Description LIKE '%my%brand%' THEN 'Branded'
                WHEN Product='Unclassified' THEN 'Unclassified'
                ELSE 'Generic'
            END AS Brand,
            ...
FROM        ...

如果查询无法在描述列中找到品牌名称,并且“产品”列也被确定为具有“未分类”值,则“品牌”为“未分类”。目前,此语句仅输出“品牌”或“通用”品牌类型。即使产品为“未分类”,它仍会给出“通用”,这不是我需要的输出。

有任何想法吗?


阅读 258

收藏
2021-05-16

共1个答案

小编典典

SELECT子句的结果是并行计算的(就像正在评估它们一样)-这样,一列的值不能依赖于另一列的值。解决方案是引入CTE或子查询,以便您具有多个SELECT子句:

SELECT
    ...,
    CASE 
        WHEN t.T2Description LIKE '%my%brand%' THEN 'Branded'
        WHEN Product='Unclassified' THEN 'Unclassified'
        ELSE 'Generic'
    END AS Brand
FROM (
    SELECT      ..., 
        CASE 
            WHEN dbo.Table1.Description LIKE '%car%' THEN 'Car'
            WHEN ... 
            ELSE 'Unclassified'
        END AS Product, 
        dbo.Table2.Description as T2Description,
        ...
    FROM        ...
) t
2021-05-16