데이터값
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
)
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 ) ;