2014-11-28 3 views
0

TOP를 사용하여 SELECT CASE를 해결하는 데 문제가 있습니다.CASE-WHEN-THEN의 TOP 처리

나는 이것에 관해 아주 새로운 것을 언급해야합니까? : D 또한이 Stackoverflow 내 첫 번째 게시물입니다. 안녕 !

표 1 :

나는 두 테이블의 정보 중 하나 개의 항목을 기입 할 컬럼 2

표 2에 가입한다 : 1 열 제가

표 1은 사용하고자하는 데이터를 포함한다 : 열 2 그래서

에 참여한다 :

열 (1) 내가

표 2는 사용하고자하는 데이터를 포함

표 1 열 1에는 문자 (D M 및 T)와 빈 공백이 포함됩니다.

표 2 열 1 ('롤스' '전송' '배달') 나는 다음과 같은 조건을 사용하여 내 열을 채우기 위해 노력하고있어

을 단어가 포함

  • 는 열 T1.C1가 포함 된 경우 D, M 또는 T는, 열 T1.C1가 비어있는 경우, 열 T2.C1 볼
  • DM 또는 T. 쓰기 : 쓰기, 열 T1.C1는 '롤스는'포함
    • 경우를 'R'
    • 엘자 나는 열 B에서 원하는 정보를 사용할 수있는 TOP이 필요하기 때문에 그 자체는 정말 빨리 나를 위해

상황이 추한 아무것도 쓰지 않는다.

최상의 결과를 얻으려면 키워드 'From'근처에 구문이 올바르지 않습니다..

여기 내 코드가 있습니다. 제안 사항이 있으십니까?

SELECT 

(CASE T1.C1 
WHEN 'D' 
    THEN 'D' 
WHEN 'M' 
    THEN 'M' 
WHEN 'T' 
    THEN 'T' 
WHEN (SELECT TOP 1 T2.C1 FROM T2 WHERE T1.C2=T2.C2) 
    THEN 'R' 
ELSE 
    '' 
END) as my_data, 

FROM T1 
+1

'my_data'다음에 쉼표를 제거하십시오. –

답변

0

나는 당신의 라인을 따라 뭔가이를 작성하는 간단한 방법을 찾기 위해 시도해야한다고 생각 : 당신은 당신의 테이블 스키마를 게시하지 않은

WITH cte 
      AS (SELECT C1 , 
         C2 , 
         ROW_NUMBER() OVER (PARTITION BY C2 ORDER BY col) rn 
       FROM  Table2 
      ) 
    SELECT CASE WHEN T1.C1 = '' THEN LEFT(T2.C1, 1) 
       ELSE T1.C1 
      END AS my_data 
    FROM Table1 T1 
      LEFT OUTER JOIN cte T2 ON T1.C2 = T2.C2 
             AND T2.rn = 1 

를, 그래서 이것은 조정해야 할 수도 있습니다 .