아래 DATA절을 이용해 OUT_DATA절의 데이터로 만들고 싶습니다.
YEAR, LOCAL을 합쳐서 보고 싶습니다.
쿼리 좀 부탁드립니다.
감사합니다.
WITH DATA
AS (
SELECT 2021 YEAR, 'A' LOCAL, 1 CATEGORY1, 2 CATEGORY2 FROM DUAL
UNION ALL
SELECT 2021 YEAR, 'B' LOCAL, 3 CATEGORY1, 4 CATEGORY2 FROM DUAL
UNION ALL
SELECT 2021 YEAR, 'C' LOCAL, 5 CATEGORY1, 6 CATEGORY2 FROM DUAL
UNION ALL
SELECT 2022 YEAR, 'A' LOCAL, 3 CATEGORY1, 4 CATEGORY2 FROM DUAL
UNION ALL
SELECT 2022 YEAR, 'B' LOCAL, 5 CATEGORY1, 6 CATEGORY2 FROM DUAL
UNION ALL
SELECT 2022 YEAR, 'C' LOCAL, 7 CATEGORY1, 8 CATEGORY2 FROM DUAL
)
SELECT * FROM DATA
WITH OUT_DATA
AS (
SELECT 2021 LAST_YEAR, 'A' LOCAL, 1 LAST_CATEGORY1, 2 LAST_CATEGORY2, 2022 YEAR, 3 CATEGORY1, 4 CATEGORY2 FROM DUAL
UNION ALL
SELECT 2021 LAST_YEAR, 'B' LOCAL, 3 LAST_CATEGORY1, 4 LAST_CATEGORY2, 2022 YEAR, 5 CATEGORY1, 6 CATEGORY2 FROM DUAL
UNION ALL
SELECT 2021 LAST_YEAR, 'C' LOCAL, 5 LAST_CATEGORY1, 6 LAST_CATEGORY2, 2022 YEAR, 7 CATEGORY1, 8 CATEGORY2 FROM DUAL
)
SELECT * FROM OUT_DATA
WITH data AS
(
SELECT 2021 year, 'A' local, 1 category1, 2 category2 FROM dual
UNION ALL SELECT 2021, 'B', 3, 4 FROM dual
UNION ALL SELECT 2021, 'C', 5, 6 FROM dual
UNION ALL SELECT 2022, 'A', 3, 4 FROM dual
UNION ALL SELECT 2022, 'B', 5, 6 FROM dual
UNION ALL SELECT 2022, 'C', 7, 8 FROM dual
)
SELECT *
FROM data
PIVOT ( MIN(year) year
, MIN(category1) category1
, MIN(category2) category2
FOR year IN (2021 last, 2022 this)
)
ORDER BY local
;
정확히 개념이 안잡히는데
FOR year IN (2021 last, 2022 this) 이부분이
원데이터(소스데이터) 중 열로 바꾸고 싶은 행을 선택하는 거 맞나요?
PIVOT ( MIN(year) year
, MIN(category1) category1
, MIN(category2) category2
이부분은 만들고 싶은 열 정의 맞을까요?
구분 항목과 데이터 항목으로 나뉘고
구분 항목중 일부가 FOR 문에 들어가게 됩니다.
이번 예제에서는
데이터는 category1, category2 가 되구요.
구분 항목은 local 과 year 가 됩니다.
이중 연도를 기준으로 last_year 와 this_year 로 피벗합니다.
이번 예제에서는 연도 부분이 구분도 되고 데이터도 되네요.
SELECT local
, MIN(DECODE(year, 2021, year )) last_year
, MIN(DECODE(year, 2021, category1)) last_category1
, MIN(DECODE(year, 2021, category2)) last_category2
, MIN(DECODE(year, 2022, year )) this_year
, MIN(DECODE(year, 2022, category1)) this_category1
, MIN(DECODE(year, 2022, category2)) this_category2
FROM data
GROUP BY local
ORDER BY local
;
만들 열의 데이터 부분( YEAR, CATEGORY1, CATEGORY2 )가
PIVOT( (만들 열의 데이터 부분셋팅)
FOR (열로 나눌 기준 컬럼) IN ( 기준 컬럼의 데이터 셋)
)
이렇게 이해하면 될까요?
감사합니다.