안녕하세요 매번 찾아보고 머리써보고 도무지 못찾아서 질문만 드리네요
=============================================
DEPT_CODE DATE_GROUP USER_ID WR_COUNT
=============================================
04001 201706 A 1
04001 201706 B 2
04001 201706 C 2
04001 201706 D 3
04001 201707 X 2
04001 201707 Y 2
04001 201707 Z 8
04001 201708 Q 2
04001 201708 R 1
04001 201708 S 4
04001 201708 T 22
04001 201709 G 1
04001 201709 H 3
조회쿼리를 통해서 각 달별로 이런 데이터가 있습니다. 부서는 많기에 지정되도록 해서 특정값이 넘어옵니다(고정이라 보시면 됩니다)
각 월별로 특정 User ID에 대해서 출입횟수가 나오는데요
예를들어 A라는 ID가 2017 06월에 존재하고 07월에는 없을 수도 있고 각달별로 있을 수도 없을 수도 있습니다.
06월에 없던 ID가 10월이나 11월에 나타날 수도 있구요
저 데이터를 행렬 바꾸기를 했어요 (참고로 오라클 10g입니다)
SELECT
DECODE(DATE_GROUP, '201706', user_id, NULL) AS USER_ID1
, DECODE(DATE_GROUP, '201706', wr_count, NULL) AS USER_ID1
, DECODE(DATE_GROUP, '201707', user_id, NULL) AS USER_ID2
, DECODE(DATE_GROUP, '201707', wr_count, NULL) AS USER_ID2
FROM
.............
이런식으로 DECODE를해서 그래서 아래와 같이 만들었습니다.
USER_ID1 201706 USER_ID2 201707 USER_ID3 201708 USER_ID4 201709
A 1
B 2
C 2
D 3
X 2
Y 2
Z 8
Q 2
R 1
S 4
T 22
G 1
H 3
제가 원하는건 아래와 같이
USER_ID1 201706 USER_ID2 201707 USER_ID3 201708 USER_ID4 201709
A 1 X 2 Q 2 G 1
B 2 Y 2 R 1 H 3
C 2 Z 8 S 4
D 3 T 22
이렇게 위로 밀어 올려서 표시되게 하는건데
보통 예제나 그런거 찾아보면 DECODE이후 MAX()를 하여 한행으로 만들어버려서 저렇게 안나오네요
방법이 없을까요? 행별로 뭔가 키가 있어야 되는건지...
행별로 키가 동일 해야 된다 생각하고 RANK()로 번호를 메겨서 같은 RANK() 값으로 그룹핑 해버렸는데요...
SELECT
MAX(u001) AS u001
, MAX(c001) AS c001
, MAX(u002) AS u002
, MAX(c002) AS c002
, ........
FROM
(
SELECT
DECODE(DATE_GROUP, '201706', user_id, NULL) AS USER_ID1
, DECODE(DATE_GROUP, '201706', wr_count, NULL) AS USER_ID1
, DECODE(DATE_GROUP, '201707', user_id, NULL) AS USER_ID2
, DECODE(DATE_GROUP, '201707', wr_count, NULL) AS USER_ID2
.........
, RANK() OVER (PARTITION BY DATE_GROUP ORDER BY user_id) AS RK
FROM TABLEX
.............
)
GROUP BY rk
ORDER BY rk ASC
이렇게 RK 값 만들어서 RK값으로 그룹핑시켜서 MAX 때리니 값이 나오는데 제대로 한건지 모르겠네요