database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39699 게시물 읽기
No. 39699
with as문을 select 문으로 바꾸려면???
작성자
조성훈(usereden)
작성일
2012-10-23 12:39
조회수
5,132

예전에 러드님이 놀려주신 쿼리문을 보며 공부하고 있던 중에 모르는 것이 있어 염치불구하고 질문드립니다.

예전 질문 내용은

교시      월         화       수      목      금
5교시    수학
5교시               국어
6교시    영어
6교시    과학   국사
7교시    사회
8교시    영어2


다음과 같이 변경하려면,

교시      월           화        수      목      금
5교시    수학      국어
6교시    영어      국사
6교시    과학       
7교시    사회
8교시    영어2

이에 대해 답변해 주신 쿼리문은

WITH A AS
(
 SELECT '5교시' TT, '수학' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
 SELECT '5교시' TT, NULL W1,  '국어' W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
 SELECT '6교시' TT, '영어' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
 SELECT '6교시' TT, '과학' W1,  '국사' W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
 SELECT '7교시' TT, '사회' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
 SELECT '8교시' TT, '영어2' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL
)
SELECT TT
 , MAX( CASE WHEN CHK = 1 THEN W1 END ) W1
 , MAX( CASE WHEN CHK = 2 THEN W1 END ) W2
  FROM (
   SELECT TT, CHK, W1
    , ROW_NUMBER() OVER( PARTITION BY TT, CHK ORDER BY ROWNUM ) RN
     FROM (
      SELECT TT, W1, '1' CHK
        FROM A
       WHERE W1 IS NOT NULL
      UNION ALL
      SELECT TT, W2, '2' CHK
        FROM A
       WHERE W2 IS NOT NULL
     )
  )
 GROUP BY TT, RN
 ORDER BY 1
 

여기에서 with as 문을 일반 select 로 시작하는 구문으로 바꿔보려 하는데 잘 안됩니다.

부디 도움을 구합니다. 

 

이 글에 대한 댓글이 총 2건 있습니다.

 SELECT TT

 , MAX( CASE WHEN CHK = 1 THEN W1 END ) W1
 , MAX( CASE WHEN CHK = 2 THEN W1 END ) W2
  FROM (
   SELECT TT, CHK, W1
    , ROW_NUMBER() OVER( PARTITION BY TT, CHK ORDER BY ROWNUM ) RN
     FROM (
      SELECT TT, W1, '1' CHK
        FROM 
             (
               SELECT '5교시' TT, '수학' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '5교시' TT, NULL W1,  '국어' W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '6교시' TT, '영어' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '6교시' TT, '과학' W1,  '국사' W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '7교시' TT, '사회' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '8교시' TT, '영어2' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL
             )
       WHERE W1 IS NOT NULL
      UNION ALL
      SELECT TT, W2, '2' CHK
        FROM 
             (
               SELECT '5교시' TT, '수학' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '5교시' TT, NULL W1,  '국어' W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '6교시' TT, '영어' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '6교시' TT, '과학' W1,  '국사' W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '7교시' TT, '사회' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL UNION ALL
               SELECT '8교시' TT, '영어2' W1,  NULL W2,  NULL W3,  NULL W4,  NULL W5 FROM DUAL
             )
       WHERE W2 IS NOT NULL
     )
  )
 GROUP BY TT, RN
 ORDER BY 1
 
WITH ~ AS 를 쓰는 이유는.......
 
다른분이 설명해주실거에요. ㅋ
햇살한조각님이 2012-10-23 13:18에 작성한 댓글입니다. Edit

오!!! 감사.

이리도 빨리 답변이 올라올 줄은 생각도 못했네요.햇살한조각님 감사해요. 복받으실 거예요.

쩌그노트님이 2012-10-23 13:34에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39702PERCENTILE_CONT 함수 사용법 문의 드립니다.
이종석
2012-10-25
4137
39701마농님 아래 쿼리문 올립니다. [9]
조성훈/쩌그노트
2012-10-23
6159
39700햇살한조각님 아래 답변에서 혹시라도... [2]
쩌그노트
2012-10-23
4570
39699with as문을 select 문으로 바꾸려면??? [2]
조성훈
2012-10-23
5132
39697쿼리 질문 드립니다. [1]
김영준
2012-10-22
4165
39696거의 동일한 대용량 DB 조인 방법 문의 [1]
쿼리OTL
2012-10-22
4646
39694테이블 컬럼 관련해서 문의드립니다. [2]
유병우
2012-10-20
4157
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다