안녕하세요.
세로 데이터를 가로로 조회될 수 있도록 쿼리를 작성하는데.. 감이 안나와서..질문을 드립니다.
예를 들어 테이블 "A"가 있습니다.
이 테이블에는 직원정보, Seq No, 내용1, 내용2 이런식으로 구성이 되어 있습니다.
지금 현재 직원 정보로 조회를 하게 되면 아래와 같이 조회가 됩니다.
직원정보 | SEQ NO | 내용1 | 내용2 |
이순신 | 1 | 테스트1 | 테스트2 |
이순신 | 2 | 놀러가자 | 어디로 |
이순신 | 3 | 테스트1 | 테스트3 |
이렇게 조회 되는걸 아래 처럼 조회를 하고 싶습니다.
최대로 10개까지만 조회가 되며 조회된 데이터는 직원정보기준으로 가로로 쭉 조회되게 하고 싶습니다.
직원정보 | SEQ NO | 내용1 | 내용2 | SEQ NO | 내용1 | 내용2 | SEQ NO | 내용1 | 내용2 |
이순신 | 1 | 테스트1 | 테스트2 | 2 | 놀러가자 | 어디로 | 3 | 테스트1 | 테스트3 |
위의 표와 같이 표시를 해주고 싶으며, 보시는바와 같이 내용은 같은수도 있고 다를수도 있으며,
SEQ NO는 유니크한 숫자입니다
매번 도움만 요청을 드려 민망하네요..^^;; 환절기 건강 유의하시고.. 즐건 하루 되세요..^^
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | WITH T(직원정보, seqno, 내용1, 내용2) AS ( SELECT '이순신' , 1, '테스트1' , '테스트2' FROM DUAL UNION ALL SELECT '이순신' , 2, '놀러가자' , '어디로' FROM DUAL UNION ALL SELECT '이순신' , 3, '테스트1' , '테스트3' FROM DUAL UNION ALL SELECT '이순신2' , 1, '테스트1' , '테스트2' FROM DUAL UNION ALL SELECT '이순신2' , 2, '놀러가자' , '어디로' FROM DUAL ) SELECT 직원정보, MAX (seqno1), MAX (내용1_1), MAX (내용1_2), MAX (seqno2), MAX (내용2_1), MAX (내용2_2), MAX (seqno3), MAX (내용3_1), MAX (내용3_2) FROM ( SELECT 직원정보, seqno AS seqno1, DECODE(seqno, 1, 내용1) AS 내용1_1, DECODE(seqno, 1, 내용2) AS 내용1_2, seqno AS seqno2, DECODE(seqno, 2, 내용1) AS 내용2_1, DECODE(seqno, 2, 내용2) AS 내용2_2, seqno AS seqno3, DECODE(seqno, 3, 내용1) AS 내용3_1, DECODE(seqno, 3, 내용2) AS 내용3_2 FROM T ) WHERE seqno1 IS NOT NULL AND seqno2 IS NOT NULL AND seqno3 IS NOT NULL GROUP BY 직원정보 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | -- 수정해서 드립니다 ~ :) WITH T(직원정보, seqno, 내용1, 내용2) AS ( SELECT '이순신' , '20150910000001' , '테스트1' , '테스트2' FROM DUAL UNION ALL SELECT '이순신' , '20150910000002' , '놀러가자' , '어디로' FROM DUAL UNION ALL SELECT '이순신' , '20150910000003' , '테스트1' , '테스트3' FROM DUAL UNION ALL SELECT '이순신2' , '20150910000001' , '테스트1' , '테스트2' FROM DUAL UNION ALL SELECT '이순신2' , '20150910000002' , '놀러가자' , '어디로' FROM DUAL ) SELECT 직원정보, MAX (seqno1), MAX (내용1_1), MAX (내용1_2), MAX (seqno2), MAX (내용2_1), MAX (내용2_2), MAX (seqno3), MAX (내용3_1), MAX (내용3_2) FROM ( SELECT 직원정보, DECODE(seqno, '20150910000001' , seqno) AS seqno1, DECODE(seqno, '20150910000001' , 내용1) AS 내용1_1, DECODE(seqno, '20150910000001' , 내용2) AS 내용1_2, DECODE(seqno, '20150910000002' , seqno) AS seqno2, DECODE(seqno, '20150910000002' , 내용1) AS 내용2_1, DECODE(seqno, '20150910000002' , 내용2) AS 내용2_2, DECODE(seqno, '20150910000003' , seqno) AS seqno3, DECODE(seqno, '20150910000003' , 내용1) AS 내용3_1, DECODE(seqno, '20150910000003' , 내용2) AS 내용3_2 FROM T ) GROUP BY 직원정보 ; |
seq가 조회시에 3개만 나오는 게 아닌가보네요? 열이 옆으로 계속 확장되게 하려면 동적 쿼리 쓰셔야 하고 한정 되어있다면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | --아발란체님 꺼 좀 수정했어요 WITH T(직원정보, SEQNO, 내용1, 내용2) AS ( SELECT '이순신' , '20150910000001' , '테스트1' , '테스트2' FROM DUAL UNION ALL SELECT '이순신' , '20150910000002' , '놀러가자' , '어디로' FROM DUAL UNION ALL SELECT '이순신' , '20150910000003' , '테스트1' , '테스트3' FROM DUAL UNION ALL SELECT '이순신2' , '20151010000001' , '테스트1' , '테스트2' FROM DUAL UNION ALL SELECT '이순신2' , '20151010000001' , '놀러가자' , '어디로' FROM DUAL ) SELECT 직원정보, MAX (SEQNO1), MAX (내용1_1), MAX (내용1_2), MAX (SEQNO2), MAX (내용2_1), MAX (내용2_2), MAX (SEQNO3), MAX (내용3_1), MAX (내용3_2) FROM ( SELECT 직원정보, DECODE(RN, 1, SEQNO) AS SEQNO1, DECODE(RN, 1, 내용1) AS 내용1_1, DECODE(RN, 1, 내용2) AS 내용1_2, DECODE(RN, 2, SEQNO) AS SEQNO2, DECODE(RN, 2, 내용1) AS 내용2_1, DECODE(RN, 2, 내용2) AS 내용2_2, DECODE(RN, 3, SEQNO) AS SEQNO3, DECODE(RN, 3, 내용1) AS 내용3_1, DECODE(RN, 3, 내용2) AS 내용3_2 FROM ( SELECT 직원정보, SEQNO, 내용1, 내용2 , ROW_NUMBER() OVER (PARTITION BY 직원정보 ORDER BY SEQNO) RN FROM T) ) GROUP BY 직원정보 |
1 2 3 4 5 6 7 8 9 10 11 | SELECT 직원정보 , SUBSTR(seqno, 1, 8) ymd , MIN (DECODE(SUBSTR(seqno, 9), '000001' , 내용1)) 내용1_1 , MIN (DECODE(SUBSTR(seqno, 9), '000001' , 내용2)) 내용2_1 , MIN (DECODE(SUBSTR(seqno, 9), '000002' , 내용1)) 내용1_2 , MIN (DECODE(SUBSTR(seqno, 9), '000002' , 내용2)) 내용2_2 , MIN (DECODE(SUBSTR(seqno, 9), '000003' , 내용1)) 내용1_3 , MIN (DECODE(SUBSTR(seqno, 9), '000003' , 내용2)) 내용2_3 FROM t GROUP BY 직원정보, SUBSTR(seqno, 1, 8) ; |