PIVOT 질문 드립니다 ㅠㅠ 0 5 1,088

by 날자~! [SQL Query] [2022.01.27 12:45:51]


아래 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

by 마농 [2022.01.27 13:09:00]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
;

 


by 날자~! [2022.01.27 13:12:36]

정확히 개념이 안잡히는데

FOR year IN (2021 last, 2022 this) 이부분이

원데이터(소스데이터) 중 열로 바꾸고 싶은 행을 선택하는 거 맞나요?

 

PIVOT ( MIN(year) year

       , MIN(category1) category1

       , MIN(category2) category2

이부분은 만들고 싶은 열 정의 맞을까요?


by 마농 [2022.01.27 13:22:36]

구분 항목과 데이터 항목으로 나뉘고
구분 항목중 일부가 FOR 문에 들어가게 됩니다.
이번 예제에서는
데이터는 category1, category2 가 되구요.
구분 항목은 local 과 year 가 됩니다.
이중 연도를 기준으로 last_year 와 this_year 로 피벗합니다.
이번 예제에서는 연도 부분이 구분도 되고 데이터도 되네요.


by 마농 [2022.01.27 14:37:16]
1
2
3
4
5
6
7
8
9
10
11
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
;

 


by 날자~! [2022.01.27 15:01:00]

만들 열의 데이터 부분( YEAR, CATEGORY1, CATEGORY2 )가

PIVOT(  (만들 열의 데이터 부분셋팅)

          FOR  (열로 나눌 기준 컬럼) IN ( 기준 컬럼의 데이터 셋)

        )

이렇게 이해하면 될까요?

 

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입