2013-05-07 96 views
1

我有一個SELECT查詢,其中第二CASE語句的結果可能取決於第一CASE語句的結果另一個CASE語句 - 類似:T-SQL CASE語句依賴於同一個SELECT查詢

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',這不是我需要的輸出。

任何想法?

回答

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 
+0

ah,有道理。很酷 - 謝謝! – Katie 2013-05-07 10:29:08