2013-05-07 1 views
1

같은 SELECT 쿼리에있는 다른 CASE 문에 의존 - 무엇인가 :T-SQL의 CASE 문은 내가 두 번째 CASE 문의 결과가 첫 번째 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  ... 

여기서 설명 열의 브랜드 이름을 찾을 수없고 제품 열의 값이 '분류되지 않음'인 경우 브랜드는 '분류되지 않음'입니다. 현재이 진술은 'Branded'또는 'Generic'브랜드 유형 만 출력합니다. Product가 'Unclassified'일 때도 필요한 출력이 아닌 'Generic'을 제공합니다.

아이디어가 있으십니까?

답변

3

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

아, 의미가 있습니다 :이 솔루션은 여러 SELECT 절을 갖도록 CTE 또는 하위 쿼리를 소개하는 것입니다. 시원한 - 고마워! – Katie