Database/Oracle

[Oracle] 다중 SELECT

devsalix 2014. 8. 14. 15:07
728x90

<방법 1>

 


WITH DTABLE(NAME, WEEK, GRADE) AS(
    SELECT '이름1', 1, 'A'  FROM DUAL UNION ALL
    SELECT '이름1', 2, 'A+' FROM DUAL UNION ALL
    SELECT '이름2', 1, 'A'  FROM DUAL UNION ALL
    SELECT '이름2', 2, 'B'  FROM DUAL UNION ALL
    SELECT '이름3', 1, 'B'  FROM DUAL UNION ALL
    SELECT '이름3', 2, 'A'  FROM DUAL)
SELECT
      DISTINCT NAME,
      (SELECT GRADE FROM DTABLE WHERE NAME = T.NAME AND WEEK = 1) "1주",
      (SELECT GRADE FROM DTABLE WHERE NAME = T.NAME AND WEEK = 2) "2주"
FROM DTABLE T
ORDER BY NAME

 

 

<방법 2>

 


WITH DTABLE(NAME, WEEK, GRADE) AS(
    SELECT '이름1', 1, 'A+'  FROM DUAL UNION ALL
    SELECT '이름1', 2, 'B'   FROM DUAL UNION ALL
    SELECT '이름2', 1, 'A'   FROM DUAL UNION ALL
    SELECT '이름2', 2, 'B+'  FROM DUAL UNION ALL
    SELECT '이름3', 1, 'C+'  FROM DUAL UNION ALL
    SELECT '이름3', 2, 'C'   FROM DUAL)
SELECT DISTINCT NAME, 
       MAX(DECODE(WEEK, 1, GRADE)) OVER(PARTITION BY NAME) "1주",
       MAX(DECODE(WEEK, 2, GRADE)) OVER(PARTITION BY NAME) "2주"
FROM DTABLE
ORDER BY NAME

 

실행 결과 

 

<기존>

 

  NAME WEEK GRADE
1 이름1 1 A+
2 이름1 2 B
3 이름2 1 A
4 이름2 2 B+
5 이름3 1 C+
6 이름3 2 C


<결과>

 

  NAME 1주 2주
1 이름1 A A+
2 이름2 A B
3 이름3 B A

 

728x90
반응형

'Database > Oracle' 카테고리의 다른 글

[Oracle] 원격 서버 접속  (4) 2024.11.09
[Oracle] 특수문자 검색  (0) 2014.08.14
[Oracle] SYS_CONNECT_BY_PATH  (0) 2014.08.14
[Oracle] 테이블 정렬 (PIVOT)  (0) 2014.08.14