KPSCR       GRADE
------         ------
10                  S

9                    A

8                    B

7                    C

6                    D


위와같이 세로로 나오는 데이터를

S       A       B       C       D
--     --      --      --      --
10      9       8        7       6     


가로로 바꿔주기 위해


SELECT MAX(DECODE(GRADE, 'S', KPSCR, NULL)) S,
       MAX(DECODE(GRADE, 'A', KPSCR, NULL)) A,
       MAX(DECODE(GRADE, 'B', KPSCR, NULL)) B,
       MAX(DECODE(GRADE, 'C', KPSCR, NULL)) C,
       MAX(DECODE(GRADE, 'D', KPSCR, NULL)) D
FROM (
      SELECT ROWNUM ITM_CD, GRADE, KPSCR FROM ICMS.OMG_EVAL_GRADE_KPSCR WHERE GRADE = 'S'
   UNION ALL
   SELECT ROWNUM ITM_CD, GRADE, KPSCR FROM ICMS.OMG_EVAL_GRADE_KPSCR WHERE GRADE = 'A'
    UNION ALL
   SELECT ROWNUM ITM_CD, GRADE, KPSCR FROM ICMS.OMG_EVAL_GRADE_KPSCR WHERE GRADE = 'B'
    UNION ALL
   SELECT ROWNUM ITM_CD, GRADE, KPSCR FROM ICMS.OMG_EVAL_GRADE_KPSCR WHERE GRADE = 'C'
    UNION ALL
   SELECT ROWNUM ITM_CD, GRADE, KPSCR FROM ICMS.OMG_EVAL_GRADE_KPSCR WHERE GRADE = 'D'
     )
GROUP BY ITM_CD

검색끝에 여러가지 쿼리가 있었고 결국 이런식으로 해주었다.
클라이언트가 x-platform인 관계로 불가피하게 쿼리에서 해결하였는데,
다행이 값이 변하지 않는 정적인 데이터들이라 가능했음.
 

by antilla 2011. 12. 9. 15:29