안녕하세요.
세로 데이터를 가로로 조회될 수 있도록 쿼리를 작성하는데.. 감이 안나와서..질문을 드립니다.
예를 들어 테이블 "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는 유니크한 숫자입니다
매번 도움만 요청을 드려 민망하네요..^^;; 환절기 건강 유의하시고.. 즐건 하루 되세요..^^
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 직원정보
-- 수정해서 드립니다 ~ :) 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개만 나오는 게 아닌가보네요? 열이 옆으로 계속 확장되게 하려면 동적 쿼리 쓰셔야 하고 한정 되어있다면
--아발란체님 꺼 좀 수정했어요 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 직원정보
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) ;