반응형
조건에 따라 테이블 및 조인 조건을 변경해보자
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 (조건정렬)
반응형
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] CONCAT 문자열 합치기 (0) | 2019.10.25 |
---|---|
[MSSQL] XML 데이터를 테이블 형태로 저장 (XML to DB) (0) | 2019.10.06 |
[MSSQL] OUTPUT INSERTED, DELETED 데이터 수정 및 삭제 전 백업 (1) | 2019.10.02 |
[MSSQL] COUNT(*) COUNT(1), COUNT(컬럼명) 행의 개수 (1) | 2019.10.01 |
[MSSQL] 세로 데이터 가로로 출력 (데이터 한줄로 출력) STUFF, FOR XML PATH (0) | 2019.09.29 |