오라클 쿼리 출력하기 질문이여~ 0 2 894

by 월화수목금금금 [SQL Query] [2017.07.03 20:40:04]


데이터값 

AAAA BBBB CCCC DDDD EEEE
NIKE SHOES 111111 NC APN 123
NIKE SHOES 111111 NC APN 123
NIKE SHOES 111111 PN APN 123
NIKE SHOES 222222 PN APN 345
ASICE SALE 333333 CN TPE  
PUMA CLEAR 444444 AP BTE  
PUMA CLEAR 444444 NE BTE  
CANCEL ADIDAS 555555 JJ EPT  
CLEAR PROSPECT 666666 JJ DNE 522
CLEAR ASICE 777777 WP EMT  
CLEAR ASICE 777777 WP APN  

 

출력값

AAAA BBBB AB_CNT CCCC ABC_CNT DDDD ABCD_CNT EEEE ABCDE_CNT
NIKE SHOES 111111 3 NC 2 APN 2 123 2
NIKE SHOES 111111 3 NC 2 APN 2 123 2
NIKE SHOES 111111 3 PN 1        
NIKE SHOES 222222 1            
ASICE SALE 333333 1            
PUMA CLEAR 444444 2 AP 1        
PUMA CLEAR 444444 2 NE 1        
CANCEL ADIDAS 555555 1            
CLEAR PROSPECT 666666 1            
CLEAR ASICE 777777 2 WP 2 EMT 1    
CLEAR ASICE 777777 2 WP 2 APN 1    

 

AAAA, BBBB, CCCC, DDDD, EEEE 5개의 컬럼이 있습니다

처음 기준을 잡는 컬럼은 AAA, BBBB 컬럼이구여

처음에는 AAAA, BBBB 컬럼으로 카운트를 합니다

AAAA BBBB COUNT(*)
NIKE SHOES 111111 3
NIKE SHOES 222222 1
ASICE SALE 333333 1
PUMA CLEAR 444444 2
CANCEL ADIDAS 555555 1
CLEAR PROSPECT 666666 1
CLEAR ASICE 777777 2

이런 값이 나올겁니다.

여기에서 COUNT값이 1인 항목은 AAAA, BBBB 항목값만 가져가면 되고

COUNT값이 2이상일경우 AAAA,BBBB,CCCC 컬럼으로 카운트를 하여 항목값이 1일때까지의 항목을 출력해야 합니다.

각 항목마다 카운드한 숫자값도 필요하구요

마지막 EEEE 컬럼까지 가서도 1개의 값이 않나오면 카운트값까지 표출하면 됩니다..

어떻게 해야 될까요?

최종 출력값은 위에 넣어 놨습니다..

 

WITH TEMP AS
(
SELECT 'NIKE SHOES' aaaa, '111111' bbbb, 'NC' cccc, 'APN' dddd, '123' eeee FROM dual UNION ALL 
SELECT 'NIKE SHOES',    '111111',    'NC',    'APN',    '123' FROM dual UNION ALL 
SELECT 'NIKE SHOES',    '111111',    'PN',    'APN',    '123' FROM dual UNION ALL 
SELECT 'NIKE SHOES',    '222222',    'PN',    'APN',    '345' FROM dual UNION ALL 
SELECT 'ASICE SALE',    '333333',    'CN',    'TPE',     NULL FROM dual UNION ALL 
SELECT 'PUMA CLEAR',    '444444',    'AP',    'BTE',     NULL FROM dual UNION ALL 
SELECT 'PUMA CLEAR',    '444444',    'NE',    'BTE',     NULL FROM dual UNION ALL 
SELECT 'CANCEL ADIDAS',    '555555',    'JJ',    'EPT',     NULL FROM dual UNION ALL 
SELECT 'CLEAR PROSPECT','666666',    'JJ',    'DNE',    '522' FROM dual UNION ALL 
SELECT 'CLEAR ASICE',   '777777',    'WP',    'EMT',     NULL FROM dual UNION ALL 
SELECT 'CLEAR ASICE',   '777777',    'WP',    'APN',    '234' FROM dual
)

by 마농 [2017.07.03 23:03:56]
SELECT aaaa
     , bbbb
     , ab_cnt
     , DECODE(ab_cnt  , 1, '', cccc     ) cccc
     , DECODE(ab_cnt  , 1, '', abc_cnt  ) abc_cnt
     , DECODE(abc_cnt , 1, '', dddd     ) dddd
     , DECODE(abc_cnt , 1, '', abcd_cnt ) abcd_cnt
     , DECODE(abcd_cnt, 1, '', eeee     ) eeee
     , DECODE(abcd_cnt, 1, '', abcde_cnt) abcde_cnt
  FROM (SELECT aaaa, bbbb, cccc, dddd, eeee
             , COUNT(*) OVER(PARTITION BY aaaa, bbbb                  ) ab_cnt
             , COUNT(*) OVER(PARTITION BY aaaa, bbbb, cccc            ) abc_cnt
             , COUNT(*) OVER(PARTITION BY aaaa, bbbb, cccc, dddd      ) abcd_cnt
             , COUNT(*) OVER(PARTITION BY aaaa, bbbb, cccc, dddd, eeee) abcde_cnt
          FROM temp
        )
;

 


by 월화수목금금금 [2017.07.03 23:57:33]

마농님 감사합니다~

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