티베로 조회된 열의 값을 컬럼명으로 사용하기 위한 쿼리입니다.
조회된 열의 값이 100개 이상이 되어 하드코딩으로 어려워 혹시 IN절에
SELECT 값을넣을 수 있나 했으나. 티베로는 불가능한것 같아 문의드립니다.
고수님들 제발 알려주세요.
SELECT DETECT_IRDNT_NM , NVL(CROPS1,0) CROPS1 , NVL(CROPS2,0) CROPS2 , NVL(CROPS3,0) CROPS3 , NVL(CROPS4,0) CROPS4 , NVL(CROPS5,0) CROPS5 , NVL(CROPS6,0) CROPS6 , NVL(CROPS7,0) CROPS7 , NVL(CROPS8,0) CROPS8 , NVL(CROPS9,0) CROPS9 , NVL(CROPS10,0) CROPS10 , NVL(CROPS11,0) CROPS11 , NVL(CROPS1,0) + NVL(CROPS2,0) + NVL(CROPS3,0) + NVL(CROPS4,0) + NVL(CROPS5,0) + NVL(CROPS6,0) + NVL(CROPS7,0) + NVL(CROPS8,0) + NVL(CROPS9,0) + NVL(CROPS10,0) + NVL(CROPS11,0) AS TOTAL FROM ( SELECT ROWNUM AS RNUM , A.* FROM ( SELECT * FROM A_TABLE PIVOT (SUM(CNT) FOR CNTC_PRDLST_NM IN ('딸기' AS CROPS1 ,'레드향'AS CROPS2, '방아' AS CROPS3,'방울토마토' AS CROPS4, '배' AS CROPS5, '배추' AS CROPS6, '브로코리' AS CROPS7 ,'시금 치' AS CROPS8, '열무' AS CROPS9 ,'토 마토' AS CROPS10, '파프리카' AS CROPS11 )) ) ) A ) T ;
지금 작성된 쿼리를 보면 구분 항목들은 하드코딩되고 있지만
컬럼명칭은 해당 명칭이 아닌 그냥 순번 형태로 되어 있네요?
컬럼명을 해당 명칭이 아닌 단순 순번형태로 가고자 한다면 하드코딩을 줄이는 방안은 있습니다.
코드테이블이 별도로 있다고 가정하면 다음과 같이 코드에 순번을 부여해서 피벗하면 됩니다.
그리고 NVL 처리 및 전체 더하기 처리를 추가로 해야 한다면
피벗보다는 차라리 전통방식(Group By, decode)이 편리합니다.
SELECT a.detect_irdnt_nm , NVL(SUM(DECODE(b.rn, 1, a.cnt)), 0) crops1 , NVL(SUM(DECODE(b.rn, 2, a.cnt)), 0) crops2 , NVL(SUM(DECODE(b.rn, 3, a.cnt)), 0) crops3 , NVL(SUM(DECODE(b.rn, 4, a.cnt)), 0) crops4 , NVL(SUM(DECODE(b.rn, 5, a.cnt)), 0) crops5 , NVL(SUM(DECODE(b.rn, 6, a.cnt)), 0) crops6 , NVL(SUM(DECODE(b.rn, 7, a.cnt)), 0) crops7 , NVL(SUM(DECODE(b.rn, 8, a.cnt)), 0) crops8 , NVL(SUM(DECODE(b.rn, 9, a.cnt)), 0) crops9 , NVL(SUM(DECODE(b.rn, 10, a.cnt)), 0) crops10 , NVL(SUM(DECODE(b.rn, 11, a.cnt)), 0) crops11 , SUM(a.cnt) total FROM a_table a , (SELECT ROW_NUMBER() OVER(ORDER BY cntc_prdlst_nm) rn , cntc_prdlst_nm FROM code_t ) b WHERE a.cntc_prdlst_nm = b.cntc_prdlst_nm GROUP BY a.detect_irdnt_nm ;