고수님들의 도움을 받고자 합니다. 1 4 1,459

by InsideCore [SQL Query] [2023.01.09 11:14:46]


안녕하세요..

도저히 답을 찾지 못하고, 도움을 청하게 되었습니다.

저희가 사용하는 DB는 Oracle 11g 이구요

아래 왼쪽표에 있는 값을 오른쪽 표와 같이 구현하고 싶은데요.

고수님들 도움을 청하고자 합니다.

SEQ COL NO   COL1 NO1 COL2 NO2
1 AAA 3   AAA 3 BBB 8
2 BBB 8   CCC 10 DDD 11
3 CCC 10   EEE 14 FFF 17
4 DDD 11  오른쪽 표로 변경 GGG 19 HHH 22
5 EEE 14   III 23 JJJ 24
6 FFF 17   KKK 26    
7 GGG 19          
8 HHH 22          
9 III 23          
10 JJJ 24          
11 KKK 26          
by 우리집아찌 [2023.01.09 11:37:46]
SELECT MAX(CASE WHEN SQ = 0 THEN COL END ) COL1
           ,  MAX(CASE WHEN SQ = 0 THEN NO END ) NO1
           ,  MAX(CASE WHEN SQ = 1 THEN COL END ) COL2
           ,  MAX(CASE WHEN SQ = 1 THEN NO END )  NO2
  FROM  ( SELECT ROUND(SEQ/2) GB
                             , MOD(SEQ+1,2) SQ
                             , T.*
                      FROM 테이블 T
              )
    GROUP BY GB
    ORDER BY GB

 


by InsideCore [2023.01.09 11:44:44]

고수님..정말 감사합니다.

한수 배웁니다.~~


by 우리집아찌 [2023.01.09 13:10:01]

오타나서 수정했어요.


by 마농 [2023.01.09 13:59:31]

seq 가 빈값이 없이 촘촘하다면? seq 를 그대로 이용하시면 되고
그게 아니라면 seq 를 이용해 순번을 다시 만들어 사용하셔야 합니다.
 

WITH t AS
(
SELECT 1 seq, 'AAA' col, 3 no FROM dual
UNION ALL SELECT  2, 'BBB',  8 FROM dual
UNION ALL SELECT  3, 'CCC', 10 FROM dual
UNION ALL SELECT  4, 'DDD', 11 FROM dual
UNION ALL SELECT  5, 'EEE', 14 FROM dual
UNION ALL SELECT  6, 'FFF', 17 FROM dual
UNION ALL SELECT  7, 'GGG', 19 FROM dual
UNION ALL SELECT  8, 'HHH', 22 FROM dual
UNION ALL SELECT  9, 'III', 23 FROM dual
UNION ALL SELECT 10, 'JJJ', 24 FROM dual
UNION ALL SELECT 11, 'KKK', 26 FROM dual
)
SELECT MIN(DECODE(x, 1, col)) col1
     , MIN(DECODE(x, 1,  no))  no1
     , MIN(DECODE(x, 2, col)) col2
     , MIN(DECODE(x, 2,  no))  no2
  FROM (SELECT col, no
             , CEIL(rn / 2) y
             , MOD(rn - 1, 2) + 1 x
          FROM (SELECT col, no
                     , ROW_NUMBER() OVER(ORDER BY seq) rn
                  FROM t
                )
        )
 GROUP BY y
 ORDER BY y
;

 

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