한줄을 여러줄로 나타내기 0 3 191

by 김재한 [SQL Query] [2020.10.16 05:04:08]


SELECT '2017' A, 1 B FROM DUAL UNION ALL
SELECT '2017' A, 2 B FROM DUAL UNION ALL
SELECT '2017' A, 3 B FROM DUAL UNION ALL
SELECT '2018' A, 4 B FROM DUAL UNION ALL
SELECT '2018' A, 1 B FROM DUAL UNION ALL
SELECT '2018' A, 2 B FROM DUAL UNION ALL
SELECT '2019' A, 3 B FROM DUAL UNION ALL
SELECT '2019' A, 4 B FROM DUAL UNION ALL
SELECT '2019' A, 1 B FROM DUAL 

아래처럼 나타내고 싶은데,,방법이 있을까요....

 

2017 1  2018 4  2019 3
2017 2  2018 1  2019 4
2017 3  2018 2  2019 1

by 우리집아찌 [2020.10.16 11:54:40]

3컬럼씩 딱떨어지면

NTILE() OVER() 함수 이용하시면 될거같아요.


by 샤랄라 [2020.10.16 14:54:07]
with t as 
(SELECT '2017' A, 1 B FROM DUAL UNION ALL
SELECT '2017' A, 2 B FROM DUAL UNION ALL
SELECT '2017' A, 3 B FROM DUAL UNION ALL
SELECT '2018' A, 4 B FROM DUAL UNION ALL
SELECT '2018' A, 1 B FROM DUAL UNION ALL
SELECT '2018' A, 2 B FROM DUAL UNION ALL
SELECT '2019' A, 3 B FROM DUAL UNION ALL
SELECT '2019' A, 4 B FROM DUAL UNION ALL
SELECT '2019' A, 1 B FROM DUAL 
)
select min(decode(g2, 1, a)) as a1, min(decode(g2, 1, b)) as a2
     , min(decode(g2, 2, a)) as b1, min(decode(g2, 2, b)) as b2
     , min(decode(g2, 3, a)) as c1, min(decode(g2, 3, b)) as c2
from (select a, b
           , row_number() over(partition by a order by a) g1
           , dense_rank() over(order by a) g2
      from t
     )
group by g1
;

 


by 마농 [2020.10.19 09:28:36]

1. 컬럼으로 나누는 기준이 모호합니다.
 - 연도별로 나누는 것인지?
 - 정렬되어 있는 순서대로 인지?
2. 정렬 순서도 모호하네요?
 - a, b 두 컬럼만으로는 위와 같은 정렬이 안되는데요.
 - 위와 같은 정렬이 될 수 있는 추가 항목이 제시되어야 합니다.
3. 전반적으로 설명이 부족합니다.
 - 원본 대비 결과표로 질문하신 것 까지는 좋은데.
 - 그에 대한 설명이 전혀 없네요.

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