마농님~ 이해하려고 열심히 삽질해봤는데요,, 0 1 2,582

by 허브 [2008.10.22 15:05:05]


   
      
SELECT YYYYMMDT,TD_OA, TD_OB, TD_OC,TD_OD,TD_OE,TD_OF,TD_OG,TD_OH,TD_OI,
TD_AO,TD_AA,TD_AB,TD_AC,TD_AD,TD_AE,TD_AF,TD_AG,TD_AH,TD_AI,TD_BO,TD_BA,TD_BB,TD_BC,TD_BD
, MIN(DECODE(RN,1,MAX1)) TD, MIN(DECODE(RN,2,MAX1)) TD, MIN(DECODE(RN,3,MAX1)) TD, MIN(DECODE(RN,4,MAX1)) TD, MIN(DECODE(RN,5,MAX1)) TD, MIN(DECODE(RN,6,MAX1)) TD
, MIN(DECODE(RN,7,MAX1)) TD, MIN(DECODE(RN,8,MAX1)) TD, MIN(DECODE(RN,9,MAX1)) TD, MIN(DECODE(RN,10,MAX1)) TD, MIN(DECODE(RN,11,MAX1)) TD, MIN(DECODE(RN,12,MAX1)) TD
, MIN(DECODE(RN,13,MAX1)) TD, MIN(DECODE(RN,14,MAX1)) TD, MIN(DECODE(RN,15,MAX1)) TD, MIN(DECODE(RN,16,MAX1)) TD, MIN(DECODE(RN,17,MAX1)) TD, MIN(DECODE(RN,18,MAX1)) TD
, MIN(DECODE(RN,19,MAX1)) TD, MIN(DECODE(RN,20,MAX1)) TD, MIN(DECODE(RN,21,MAX1)) TD, MIN(DECODE(RN,22,MAX1)) TD, MIN(DECODE(RN,23,MAX1)) TD, MIN(DECODE(RN,24,MAX1)) TD
FROM
    (
        SELECT YYYYMMDT,TD_OA, TD_OB, TD_OC,TD_OD,TD_OE,TD_OF,TD_OG,TD_OH,TD_OI,TD_AO,
               TD_AA,TD_AB,TD_AC,TD_AD,TD_AE,TD_AF,TD_AG,TD_AH,TD_AI,TD_BO,TD_BA,TD_BB,TD_BC,TD_BD,
        DECODE(lv,1,TD_oa,lv,2,TD_ob,lv,3,TD_oc,lv,4,TD_od,lv,5,TD_oe,lv,6,TD_of
               ,lv,7,TD_og,lv,8,TD_oh,lv,9,TD_oi,lv,10,TD_ao,lv,11,TD_aa,lv,12,TD_ab
               ,lv,13,TD_ac,lv,14,TD_ad,lv,15,TD_ae,lv,16,TD_af,lv,17,TD_ag,lv,18,TD_ah
               ,lv,19,TD_ai,lv,20,TD_bo,lv,21,TD_ba,lv,22,TD_bb,lv,23,TD_bc,lv,24,TD_bd) MAX1, 
           
 ROW_NUMBER() OVER(PARTITION BY TD_OA, TD_OB, TD_OC,TD_OE,TD_OF,TD_OG,TD_OH,TD_OI,TD_AO,
                   TD_AA,TD_AB,TD_AC,TD_AD,TD_AE,TD_AF,TD_AG,TD_AH,TD_AI,TD_BO,TD_BA,TD_BB,TD_BC,TD_BD
                   ORDER BY DECODE(lv,1,TD_oa,lv,2,TD_ob,lv,3,TD_oc,lv,4,TD_od,lv,5,TD_oe,lv,6,TD_of
                   ,lv,7,TD_og,lv,8,TD_oh,lv,9,TD_oi,lv,10,TD_ao,lv,11,TD_aa,lv,12,TD_ab
                   ,lv,13,TD_ac,lv,14,TD_ad,lv,15,TD_ae,lv,16,TD_af,lv,17,TD_ag,lv,18,TD_ah
                   ,lv,19,TD_ai,lv,20,TD_bo,lv,21,TD_ba,lv,22,TD_bb,lv,23,TD_bc,lv,24,TD_bd) DESC) RN
    FROM system.acctest_ds
    ,(SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 24))
        group by YYYYMMDT,TD_OA,TD_OB,TD_OC,TD_OD,TD_OE,TD_OF,TD_OG,TD_OH,TD_OI,TD_AO,
    TD_AA,TD_AB,TD_AC,TD_AD,TD_AE,TD_AF,TD_AG,TD_AH,TD_AI,TD_BO,
    TD_BA,TD_BB,TD_BC,TD_BD;

제가 초짜라서 알려주신데로 작성해보려고 이해를 잘 못하면서 때려 맞추기로 좀 해봤는데요

최고 큰 데이터를 가진 필드순으로 정렬이 안되는거 같아요

데이터 출력을해보면 원래 system.acctest_ds 테이블에 데이터를 그대로 보여주고

뒤에 td, td_1,td_2,td_3,td_..... 23까지 필드가 생기는데 뒤에생기는 

td에는 td_oa에 데이터가 들어가있고 td_1부터는 필드들에 데이터들은 모두 2로만 채워지는데여

재가 쿼리를 잘못 작성한거가네요 ;;

 

혹시 알려주신방법이 한행에 데이터를 한컬럼에 세로로 행번호를 줘서 임시로 저장했다가

순위를매겨서 다시 순위별로 가로로 펼치면서 정렬 시키는 그런 개념이 맞나요?

그리고 tab1에 자리에 테이블 명이아닌

select
Round(AVG(SUM(TD_OA))), Round(AVG(SUM(TD_OB))), Round(AVG(SUM(TD_OC))),
Round(AVG(SUM(TD_OD))), Round(AVG(SUM(TD_OE))), Round(AVG(SUM(TD_OF))),
Round(AVG(SUM(TD_OG))), Round(AVG(SUM(TD_OH))), Round(AVG(SUM(TD_OI))),
Round(AVG(SUM(TD_AO))), Round(AVG(SUM(TD_AA))), Round(AVG(SUM(TD_AB))),
Round(AVG(SUM(TD_AC))), Round(AVG(SUM(TD_AD))), Round(AVG(SUM(TD_AE))),
Round(AVG(SUM(TD_AF))), Round(AVG(SUM(TD_AG))), Round(AVG(SUM(TD_AH))),
Round(AVG(SUM(TD_AI))), Round(AVG(SUM(TD_BO))), Round(AVG(SUM(TD_BA))),
Round(AVG(SUM(TD_BB))), Round(AVG(SUM(TD_BC))), Round(AVG(SUM(TD_BD)))
from system.ACCTEST_DS
WHERE YYYYMMDT in to_char(to_date(’20071029’,’yyyymmdd’)-(7*1), ’yyyymmdd’)
or YYYYMMDT in to_char(to_date(’20071029’,’yyyymmdd’)-(7*2), ’yyyymmdd’)
or YYYYMMDT in to_char(to_date(’20071029’,’yyyymmdd’)-(7*3), ’yyyymmdd’) group by yyyymmdt

이 쿼리를 통채로 넣어도 괜찮을까요? 이 쿼리를 통해서 구해진 데이터들을

크기별로 정렬시키려는데 혼돈이 되네요 ;;

 

by 서성우 [2008.10.23 11:28:17]
WITH asd AS(
SELECT 1 pk, 100 oa , 200 ob , 3000 oc FROM dual
UNION ALL
SELECT 2 pk ,10000 oa , 200 ob , 3000 oc FROM dual
UNION ALL
SELECT 3 pk ,100 oa , 20000 ob , 3000 oc FROM dual
UNION ALL
SELECT 4 pk, 100000 oa , 200 ob , 3000 oc FROM dual
UNION ALL
SELECT 5 pk, 100 oa , 200 ob , 30000 oc FROM dual
)
SELECT pk, Max(Decode(rn,'1',cc)) oa,Max(Decode(rn,'2',cc)) ob,Max(Decode(rn,'3',cc)) oc FROM
(SELECT pk,cc,Row_Number() over (PARTITION BY pk ORDER BY length(cc) DESC , cc DESC ) rn FROM
(SELECT pk , Decode(pk||aa,'11',a,'12',b,'13',c,'21',a,'22',b,'23',c
,'31',a,'32',b,'33',c,'41',a,'42',b,'43',c,'51',a,'52',b,'53',c,'') cc FROM
(SELECT pk,a,b,c,aa FROM
(SELECT pk,SubStr(a,0,InStr(a,',',1)-1) a,SubStr(a,InStr(a,',',1,1)+1,InStr(a,',',1,2)-InStr(a,',',1,1)-1) b,
SubStr(a,InStr(a,',',1,2)+1) c , aa
FROM
(SELECT pk,oa ||','||ob||','||oc a FROM asd),
(SELECT LEVEL aa FROM dual CONNECT BY LEVEL <=5))))
WHERE cc IS NOT NULL)
GROUP BY pk

전 이런식으로 짜봤는데 도움이 되실지 모르겠네요
3컬럼을 하나의 컬럼으로 붙여서
그 하나의 컬럼을 level을 사용하여 복사 한뒤
레벨별로 필요한 값들만 불러와서
row_number를 이용해서 정렬후(값비교)
각컬럼에 넣어주는 방식을 사용했습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입