각각 다른 갯수를 가진 ROW데이터를 그룹으로 하나로 묻는 방법이 있을까요?? 0 4 479

by 주명상 [SQL Query] [2018.04.12 15:31:16]


구분 A B B
그룹A    
그룹A    
그룹A    
그룹A    
그룹A    
그룹A    
그룹A    
그룹A    
그룹A    

ㄷㅔ이터가 저런방식으로 만들어지는데 그룹A를 기준으로 데이터를 합치고 싶습니다.

쿼리로 할수 있는 방법이 있을까요? ㅜㅜ 도움 청해봅니다..

구분 A B C
그룹A
그룹A  
그룹A  
그룹A    
그룹A    

 

by 우리집아찌 [2018.04.12 15:35:57]

그룹A 말고 그룹D 도 존재한다는 말인가요?

원하신는 결과를 자세히 설명해주세요?


by 우리집아찌 [2018.04.12 15:50:38]
-- 대충 만들어봤습니다.
WITH T (GB,A,B,C)AS (
SELECT '그룹A' , '가' ,'' ,'' FROM DUAL UNION ALL
SELECT '그룹A' , '나' ,'' ,'' FROM DUAL UNION ALL
SELECT '그룹A' , '다' ,'' ,'' FROM DUAL UNION ALL
SELECT '그룹A' , '' ,'라' ,'' FROM DUAL UNION ALL
SELECT '그룹A' , '' ,'마' ,'' FROM DUAL UNION ALL
SELECT '그룹A' , '' ,'바' ,'' FROM DUAL UNION ALL
SELECT '그룹A' , '' ,'사' ,'' FROM DUAL UNION ALL
SELECT '그룹A' , '' ,'아' ,'' FROM DUAL UNION ALL
SELECT '그룹A' , '' ,'' ,'자' FROM DUAL UNION ALL
SELECT '그룹B' , 'A' ,'' ,'' FROM DUAL UNION ALL
SELECT '그룹B' , '' ,'B' ,'' FROM DUAL 
)
                  
SELECT RN 
     , GB
     , MIN(A) A
     , MIN(B) B
     , MIN(C) C

  FROM  ( SELECT T.*
               , LEAST( ROW_NUMBER() OVER(PARTITION BY GB ORDER BY A ) 
                      , ROW_NUMBER() OVER(PARTITION BY GB ORDER BY B )  
                      , ROW_NUMBER() OVER(PARTITION BY GB ORDER BY C ) 
                      ) RN 
                  FROM T )
GROUP BY GB , RN
ORDER BY GB , RN



 


by 마농 [2018.04.12 16:01:08]
-- 11G --
SELECT *
  FROM (SELECT gb, gb1, v
             , ROW_NUMBER() OVER(PARTITION BY gb, gb1 ORDER BY v) rn
          FROM t
         UNPIVOT (v FOR gb1 IN (a, b, c))
        )
 PIVOT (MIN(v) FOR gb1 IN ('A' a, 'B' b, 'C' c))
 ORDER BY gb, rn
;
-- 10G --
SELECT gb
     , MIN(a) a
     , MIN(b) b
     , MIN(c) c
  FROM (SELECT gb, a, b, c
             , ROW_NUMBER() OVER(
               PARTITION BY gb, CASE WHEN a IS NOT NULL THEN 1
                                     WHEN b IS NOT NULL THEN 2
                                     WHEN c IS NOT NULL THEN 3
                                 END
                   ORDER BY a, b, c
               ) rn
          FROM t
        )
 GROUP BY gb, rn
 ORDER BY gb, rn
;

 


by 주명상 [2018.04.12 16:51:58]

그룹은 여러가지 될수 있습니다.

 환경이 10g인데 알려주신방법을 토대로 한번 만들어 보겠습니다. 감사합니다

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