2012-11-07 6 views
0

조건부 인수를 기반으로 두 개의 다른 테이블에서 같은 열을 가져 오려고합니다.여러 문을 동시에 선택하기위한 case 문

그래서 전에 많이 사용하지 않은 CASE 문을 발견했습니다. 나는 이것이이 mannor에서 나를 위해 일할 것이라는 것을 알았지 만 하나의 CASE 문을 수행 한 다음 필요한 열을 선택하고 열별로 처리하면 좋을 것입니다.

다음은 내가 가지고 있고 일하는 것의 예입니다. 조금만 중복 된 것처럼 보입니다.

SELECT TOP(10) 
    u1.userid as userid, 
    version = CASE 
     WHEN (u2.userid IS NULL OR u1.enabled = 0) 
     THEN 3 
     ELSE 4 
    END, 
    nameOrg = CASE 
     WHEN (u2.userid IS NULL OR u1.enabled = 0) 
     THEN CONVERT(NVARCHAR, u1.title) 
     ELSE CONVERT(NVARCHAR, u2.title) 
    END, 
    nameContact = CASE 
     WHEN (u2.userid IS NULL OR u1.enabled = 0) 
     THEN CONVERT(NVARCHAR, u1.contact) 
     ELSE CONVERT(NVARCHAR, u2.contact) 
    END, 
    pltName = CASE 
     WHEN (u2.userid IS NULL OR u1.enabled = 0) 
     THEN p1.name 
     ELSE p2.name 
    END 
FROM 
    usr1 u1 
LEFT OUTER JOIN 
    usr2 u2 
    ON u1.userid = u2.userid 
LEFT OUTER JOIN 
    plt2 p2 
    ON u2.pltid = p2.pltid 
LEFT OUTER JOIN 
    plt1 p1 
    ON u1.pltid = p1.pltid 

조언이 있으십니까?

  • mov 7, 5:22 편집 : 필요한 기능에 추가하려면 plt table 및 pltName 대문자에 조인을 추가하십시오.

답변

0

usr2 데이터 세트에 일치하는 사용자 ID가없는 경우 모든 필드는 null입니다. 아래에서했던 것처럼 isnull 함수를 사용하여 좀 더 자세한 정보를 표시 할 수 있지만 한 줄로 표시되지는 않습니다.

SELECT TOP(10) 
    u1.userid as userid 
    ,version = CASE 
     WHEN (u2.userid IS NULL OR u1.enabled = 0) 
     THEN 3 
     ELSE 4 
    END 
    ,CONVERT(NVARCHAR,isnull(u2.title,u1.title)) nameOrg 
    ,CONVERT(NVARCHAR,isnull(u2.contact,u1.contact)) nameContact 
FROM 
    usr1 u1 
LEFT OUTER JOIN 
    usr2 u2 
ON u1.userid = u2.userid 
+0

유용한 아이디어이지만 null 표현에 대한 보조 조건이 있다는 사실도 무시합니다. 그건 그렇고 또 다른 조인을 추가했습니다. 조건은 동일하고 (처음 두 테이블을 확인합니다), 사용 된 변수는 100 % 유효 답변을 얻는 데 다른 테이블에 있습니다. –