我有一个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 ...
如果查询无法在描述列中找到品牌名称,并且“产品”列也被确定为具有“未分类”值,则“品牌”为“未分类”。目前,此语句仅输出“品牌”或“通用”品牌类型。即使产品为“未分类”,它仍会给出“通用”,这不是我需要的输出。
有任何想法吗?
SELECT子句的结果是并行计算的(就像正在评估它们一样)-这样,一列的值不能依赖于另一列的值。解决方案是引入CTE或子查询,以便您具有多个SELECT子句:
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