1

我有一个 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        ...

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

有任何想法吗?

4

1 回答 1

4

子句的结果是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
于 2013-05-07T10:10:14.767 回答