ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 행 -> 열 변환
    카테고리 없음 2020. 9. 17. 15:33

    DECODE 사용하면 된다.

    	select SALES_SER_NAME,
                    TO_NUMBER(SALES_STORE_COUNT) SALES_STORE_COUNT,
                    SALES_BD_NAME,
                    cc.CS_CODE_NAME,
                    ROW_NUMBER() over (partition by cc.CS_CODE_NAME order by TO_NUMBER(SALES_STORE_COUNT) desc) rank
    
    
             from SALES_TEMP_CSCODE
                      inner join CS_CODE a on SALES_BD_NAME = '서울 중구 명동역'
                 and SALES_BUNGI_CODE = '4' and SALES_TEMP_CSCODE.SALES_CS_CODE = a.CS_CODE
                      inner join CS_CODE CC on CC.CS_CODE = a.CS_CODE2
             group by SALES_CS_CODE, SALES_SER_NAME, TO_NUMBER(SALES_STORE_COUNT), SALES_BD_NAME, cc.CS_CODE_NAME
             order by CS_CODE_NAME desc, rank asc

    행을 열로 반환 하기 전 데이터

    select rank,
           MIN(DECODE(CS_CODE_NAME, '외식업', SALES_SER_NAME))     sales_ser_name_1,
           MIN(DECODE(CS_CODE_NAME, '외식업', SALES_STORE_COUNT))  sales_store_count_1,
           MIN(DECODE(CS_CODE_NAME, '외식업', SALES_BD_NAME))      sales_bd_name_1,
           MIN(DECODE(CS_CODE_NAME, '외식업', CS_CODE_NAME))       cs_code_name_1,
           MIN(DECODE(CS_CODE_NAME, '소매업', SALES_SER_NAME))     sales_ser_name_2,
           MIN(DECODE(CS_CODE_NAME, '소매업', SALES_STORE_COUNT))  sales_store_count_2,
           MIN(DECODE(CS_CODE_NAME, '소매업', SALES_BD_NAME))      sales_bd_name_2,
           MIN(DECODE(CS_CODE_NAME, '소매업', CS_CODE_NAME))       cs_code_name_2,
           MIN(DECODE(CS_CODE_NAME, '서비스업', SALES_SER_NAME))   sales_ser_name_3,
           MIN(DECODE(CS_CODE_NAME, '서비스업', SALES_STORE_COUNT))sales_store_count_3,
           MIN(DECODE(CS_CODE_NAME, '서비스업', SALES_BD_NAME))    sales_bd_name_3,
           MIN(DECODE(CS_CODE_NAME, '서비스업', CS_CODE_NAME))     cs_code_name_3
    
    from (
             select SALES_SER_NAME,
                    TO_NUMBER(SALES_STORE_COUNT) SALES_STORE_COUNT,
                    SALES_BD_NAME,
                    cc.CS_CODE_NAME,
                    ROW_NUMBER() over (partition by cc.CS_CODE_NAME order by TO_NUMBER(SALES_STORE_COUNT) desc) rank
    
    
             from SALES_TEMP_CSCODE
                      inner join CS_CODE a on SALES_BD_NAME = '서울 중구 명동역'
                 and SALES_BUNGI_CODE = '4' and SALES_TEMP_CSCODE.SALES_CS_CODE = a.CS_CODE
                      inner join CS_CODE CC on CC.CS_CODE = a.CS_CODE2
             group by SALES_CS_CODE, SALES_SER_NAME, TO_NUMBER(SALES_STORE_COUNT), SALES_BD_NAME, cc.CS_CODE_NAME
             order by CS_CODE_NAME desc, rank asc
         )
    WHERE rank <= 5
    
    GROUP BY rank
    order by rank asc

    DECODE 를 사용하여 행 데이터를 열 데이터로 변환

    댓글

Designed by Tistory.