본문 바로가기
IT/Database

MSSQL - WITH 구문 (임시 테이블 만들기)

by sgoho01 2019. 11. 28.

MSSQL - WITH 구문 (임시 테이블 만들기)

어느 회원의 한달 데이터를 조회할 경우가 생겼는데 이 회원은 한 달 동안 매일 데이터가 저장된 것은 아니었고,
데이터 조회 시에는 한 달의 모든 일자의 데이터를 가져와야 했다. (ex> 데이터는 1일,2일,3일,5일,16일,19일 들어있다.)
때문에 달력처럼 한달의 일자를 생성하는 임시 테이블을 생성하고자 WITH 구문을 사용하게 되었다.

다른 DB와 비슷하게 MSSQL에도 WITH이 있어서 해당 구문을 사용하여 달력 임시테이블을 만들어 회원의 데이터를 조회에 성공하였다.

WITH '임시테이블명' AS
(
    생성할 쿼리
)

사용법은 위와 같다.
생성할 임시 테이블 쿼리를 생성할 쿼리 부분에 입력하고 해당 테이블의 이름을 WITH 다음 입력해주면 된다.

달력 임시테이블을 만든 쿼리는 다음과 같다.

DECLARE @STARTDATE VARCHAR(10)
DECLARE @ENDDATE VARCHAR(10)

SET @STARTDATE = '2019-01-01'
SET @ENDDATE = '2019-01-31'

;WITH MONTH AS
(
    SELECT CONVERT(VARCHAR(10), @STARTDATE, 120) AS DAY
    UNION ALL 
    SELECT CONVERT(VARCHAR(10), DATEADD(dd, 1, DAY), 120) AS DAY
    FROM MONTH
    WHERE CONVERT(VARCHAR(10), DAY, 120) < CONVERT(VARCHAR(10), @ENDDATE, 120)
)
SELECT * FROM MONTH
  • 시작일과 종료일을 담을 변수를 만든 후 동적으로 시작, 종료일을 설정할 수 있다.
  • 임시 테이블의 시작일자를 먼저 입력 후 시작일자에 1일 더해가며 종료일까지 날짜를 임시 테이블에 입력한다.
  • 생성된 임시 테이블을 이용하여 원하는 쿼리를 만들 수 있다.

 

WITH (
...(위의 쿼리)
)
SELECT 
    * 
FROM
    MONTH MONTH
    LEFT JOIN TB_USER_WORK UWK
    ON MONTH.DAY = UWK.WORK_DAY
WHERE
    ...

처럼 쿼리를 조인하여 원하는 날짜의 데이터를 가져올 수 있다.

댓글