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 39700 게시물 읽기
No. 39700
햇살한조각님 아래 답변에서 혹시라도...
작성자
쩌그노트
작성일
2012-10-23 17:35
조회수
4,571

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


다음과 같이 변경하려면,

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

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

부디 도움을 구합니다.

-------------------------------------

이에 대한 햇살한조각님의 답변은,

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
 

이 쿼리문을 이용해서 일주일 치를 모두 구하려고 하니 쿼리문이 한도 없이 길어 지네요.

염치불구하고 혹시라도 간단하게 구현할 수 있는 방법은 없을까요?

 

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

인라인뷰가 동일하게 여러번 사용될 때 With 문을 사용하면 편리합니다.
With 문을 사용하면 안되는 이유라도 있는 건가요?


또한 With 문이 사용된 이유는 실 데이터가 없어서
쿼리 실행 테스트용 데이터를 만들기 위한 용도로 사용된것인데요.
그런 With 문이 굳이 필요한가요?
실 데이터가 저장된 테이블이 있다면 그걸 직접 사용하시면 되지요.


혹시 원본이라고 제시하신 자료가 실제 원본이 아닌 쿼리의 결과라면?
- 원본집합 > 중간집합 > 최종집합
즉, 중간집합까지는 쿼리로 구했는데.. 최종 결과를 구하고 싶다?
질문하실때 원본에 대한 얘기는 쏙 빼고 중간집합부터 질문하셨다면?
중간집합을 거치지 않고 바로
최종집합을 구하는 방법이 더 간결할 수도 있습니다.

마농(manon94)님이 2012-10-23 18:04에 작성한 댓글입니다.

아, 마농님께서 댓글을 달아주셨군요. 예전에 마농님이 달아주신 댓글을 참조로
현재까지도 잘 응용해 사용하고 있습니다.
WITH 문을 사용할 수 없는 이유는 현재 시스템 업무가 늘어나면서 3tire로
전환하려 하니 더이상 WITH 문을 쓸 수가 없기 때문입니다. 컴파일 에러가 나는 군요.
예전 러드님께서 올려 주신 쿼리를 가지고 응용해서 지금까지 잘 사용해 왔으나 
현재로선 쿼리를 수정해야 하는데 위에서 처럼 with문을 select 문으로 바꾸려 하니  쿼리량이
한없이 길어져 현실적으로 사용하기가 어렵네요. 업무는 해야겠고 실력은 초보자니 매번
여러분께 폐를 끼칩니다. 나름 할 수 있는 때까지 해보고 며칠 고민했던지라  간절한 마음에 도움글 올립니다.  더 고민해보겠습니다. 댓글 주셔서 감사합니다.

아참, 그리고 이 글 바로 밑에 질문 글은 제가 올린겁니다. 실명, 닉네임 저도 모르게 혼동해서 올렸습니다. 양해 바랍니다. 

쩌그노트님이 2012-10-23 19:09에 작성한 댓글입니다.
이 댓글은 2012-10-23 19:27에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39704기간 중복 방지에 대한 해결책을 문의 합니다.
김준기
2012-10-25
4556
39702PERCENTILE_CONT 함수 사용법 문의 드립니다.
이종석
2012-10-25
4137
39701마농님 아래 쿼리문 올립니다. [9]
조성훈/쩌그노트
2012-10-23
6160
39700햇살한조각님 아래 답변에서 혹시라도... [2]
쩌그노트
2012-10-23
4571
39699with as문을 select 문으로 바꾸려면??? [2]
조성훈
2012-10-23
5132
39697쿼리 질문 드립니다. [1]
김영준
2012-10-22
4165
39696거의 동일한 대용량 DB 조인 방법 문의 [1]
쿼리OTL
2012-10-22
4646
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다