[MS SQL] Common Table Expression (CTE)

Oracle 의 Subquery Factoring 기능을 MS SQL 은  2005 버전부터  Common Table Expression (CTE) 이라는 이름으로 기능을 제공하기 시작했습니다.

Source: Bing Image Creator

Common Table Expression (CTE)

Oracle 의 Subquery Factoring 기능을 MS SQL 은  2005 버전부터  Common Table Expression (CTE) 이라는 이름으로 기능을 제공하기 시작했습니다.
 
아래 쿼리는 https://database.sarang.net 사이트에서 발췌했습니다.
WITH MYCAL AS 
( 
    SELECT 
        CAST('1900-01-01' AS DATETIME) DT
        , IDX = 1
    UNION ALL 
    SELECT 
        DT + 1 
        , IDX + 1
    FROM MYCAL 
    WHERE 
        DT + 1 <= '2050-12-31' 
) 
SELECT 
    IDX
    , [DT]
    , [DT_1]  = DATEADD(DD, -1, DT) 
    , [YMD]   = CONVERT(CHAR(8), DT, 112)
    , [YY]   = DATEPART(YEAR, DT) 
    , [MM]   = DATEPART(MONTH, DT)
    , [DD]   = DATEPART(DAY, DT)
    , [WKDAY_SEQ] = DATEPART(DW, DT)  
    , [QTR]   = DATEPART(QQ, DT) 
    , [ANIMAL]  = CASE DATEPART(YEAR, DT) % 12 - 3 
    WHEN 1 THEN '자' WHEN 2 THEN '축' WHEN 3 THEN '인' 
    WHEN 4 THEN '묘' WHEN 5 THEN '진' WHEN 6 THEN '사'
    WHEN 7 THEN '오' WHEN 8 THEN '미' WHEN 9 THEN '신' 
    WHEN 10 THEN '유' WHEN 11 THEN '술' WHEN 12 THEN '해' END
FROM MYCAL 
OPTION (MAXRECURSION 0) 
이 쿼리를 MS SQL  에서 돌려보시기 바랍니다.
위 기능을 아래와 같이 사용할  수 있겠지요.
 
WITH MYCAL AS 
( 
    SELECT 
        CAST('37001' AS int) DT
        , IDX = 1
    UNION ALL 
    SELECT 
        DT + 1 
        , IDX + 1
    FROM MYCAL 
    WHERE 
        DT + 1 <= '87100' 
) 
INSERT INTO INSERTTEST
SELECT 
    IDX, 
    DT, 
    cast(IDX as varchar) + '_' + cast(DT as varchar) IDVALUE
FROM MYCAL 
OPTION (MAXRECURSION 0) 
행복한 고수되십시오.
 
WooGong ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
출처: https://www.jumptovb.net/?page=194 [Jump To VB.NET:티스토리]

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다