본문 바로가기

프로그래밍/MSSQL

[MSSQL] JOIN CASE, JOIN OR 조건에 따라 조인테이블 및 조인조건 변경

반응형

 

 

조건에 따라 테이블 및 조인 조건을 변경해보자

 

TABLE1과 TABLE2를 조인하려고 한다.

이때 TABLE1의 COL1을 파라미터값 @Str 값에 따라 TABLE2의 COL1 혹은 COL2로 조인조건을 지정하려고 한다.

 

1) @Str의 값이 Y일 경우 TABLE1 COL1, TABLE2 COL1

2) @Str의 값이 N일 경우 TABLE1 COL1, TABLE2 COL2

 

 

첫번째 방법. JOIN CASE

DECLARE @Str CHAR(1) = 'Y' -- 조건 구분값 (Y or N)
 
SELECT *
FROM TABLE1 A
    INNER JOIN TABLE2 B ON A.COL1 =
                    CASE
                        WHEN @Str = 'Y' THEN B.COL1
                        WHEN @Str = 'N' THEN B.COL2
                    END

 

 

 

 

두번째 방법. JOIN OR

DECLARE @Str CHAR(1) = 'Y' -- 조건 구분값 (Y or N)
 
SELECT *
FROM TABLE1 A
    INNER JOIN TABLE2 B ON (@Str = 'Y' AND A.COL1 = B.COL1)
                            OR (@Str = 'N' AND A.COL1 = B.COL2)

 

 

 

 

예제

@Str의 값에 따라 TABLE1과 TABLE2 혹은 TABLE1과 TABLE3을 조인 걸어보자

 

DECLARE @Str CHAR(1) = 'Y'; -- 조건 구분값 (Y or N)
 
SELECT *
FROM TABLE1 A
    LEFT JOIN TABLE2 B ON A.COL1 = B.COL1
    LEFT JOIN TABLE3 C ON A.COL1 = C.COL1
WHERE (@Str = 'Y' AND B.COL1 IS NOT NULL)  -- 'Y'일 경우 TABLE2와 조인
    OR (@Str = 'N' AND C.COL1 IS NOT NULL) -- 'N'일 경우 TABLE3과 조인

 

 

 

[MSSQL] COUNT CASE (조건 카운트) COUNT DISTINCT (중복제거 카운트)
[MSSQL] WHERE CASE WHEN 조건절에 조건문
[MSSQL] ORDER BY CASE (조건정렬)

 

 

 

반응형