我有一个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 ...
如果查询无法在描述列中找到品牌名称且“产品”列也已确定具有“未分类”值,则“品牌”为“未分类”。目前,该声明仅输出'品牌'或'通用'品牌类型。即使Product是'Unclassified',它仍然会给出'Generic',这不是我需要的输出。
有什么想法吗?
答案 0 :(得分:3)
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