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 39824 게시물 읽기
No. 39824
조언부탁드립니다.
작성자
부족한타블로
작성일
2012-11-29 09:47
조회수
6,172

이것저것 읽어보다 여기에 질문사항이 있어서 글을 남깁니다 ....

WITH V AS

(
    select  '1' TM,    'G1' LOC,    'AA' NM from dual union all
    select  '1',    'G1',    'BB' from dual union all
    select  '1',    'G1',    'CC' from dual union all
    select  '1',    'G2',    'DD' from dual union all
    select  '1',    'G2',    'EE' from dual union all
    select  '1',    'G2',    'FF' from dual union all
    select  '1',    'G2',    'GG' from dual union all
    select  '1',    'G3',    'HH' from dual union all
    select  '1',    'G3',    'II' from dual union all
    select  '1',    'G4',    'JJ' from dual union all
    select  '2',    'G1',    'KK' from dual union all
    select  '2',    'G1',    'LL' from dual union all
    select  '2',    'G2',    'MM' from dual union all
    select  '2',    'G2',    'NN' from dual union all
    select  '2',    'G2',    'OO' from dual union all
    select  '2',    'G2',    'PP' from dual union all
    select  '2',    'G3',    'QQ' from dual union all
    select  '2',    'G4',    'RR' from dual union all
    select  '2',    'G4',    'SS' from dual
)
SELECT TM
     , MAX(CASE WHEN LOC = 'G1' THEN NM
                ELSE NULL
           END) G1
     , MAX(CASE WHEN LOC = 'G2' THEN NM
                ELSE NULL
           END) G2
     , MAX(CASE WHEN LOC = 'G3' THEN NM
                ELSE NULL
           END) G3
     , MAX(CASE WHEN LOC = 'G4' THEN NM
                ELSE NULL
           END) G4
     , COUNT(NM) SUM
FROM  (
        SELECT TM
             , LOC
             , NM
             , ROW_NUMBER() OVER(PARTITION BY TM, LOC ORDER BY NM) RNUM
        FROM   V
      )
GROUP BY TM, RNUM
ORDER BY TM, RNUM
 
햇살한조각님이 2012-10-05 09:30:43에 작성한 댓글입니다. Edit
 
 
--------------------------------------------------------------------------------------------

궁금한점이 있어서 이렇게 글을 남김니다...

여기까지 제가 보고 퍼온쿼리인데요...

햇살조각님이 작성한 쿼리입니다..

그런데요...

 SELECT TM

     , MAX(CASE WHEN LOC = 'G1' THEN NM
                ELSE NULL
           END) G1
     , MAX(CASE WHEN LOC = 'G2' THEN NM
                ELSE NULL
           END) G2
     , MAX(CASE WHEN LOC = 'G3' THEN NM
                ELSE NULL
           END) G3
     , MAX(CASE WHEN LOC = 'G4' THEN NM
                ELSE NULL
           END) G4
     , COUNT(NM) SUM
FROM  (
        SELECT TM
             , LOC
             , NM
             , ROW_NUMBER() OVER(PARTITION BY TM, LOC ORDER BY NM) RNUM
        FROM   V
      )
GROUP BY TM, RNUM
ORDER BY TM, RNUM

여기서요...

구역의 경우의 수를 알고 있는상태잖아요...

g1,g2,g3,g4이렇게요..고정이 되어 있는데요...

만약 데이터가 몇십만건이고 저렇게 경우의 수를 알수 있는 경우가 아니고

g1,g2,g3,g4,g5,g6,g7.....이렇게 경우의 수를 알수 없는 경우에는 어떻게 처리하는지 알수 있을까하고 여쭙습니다..

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

보통 이런 형태를 쿼리에서 조회컬럼이 가변적인 경우는 SQL로 힘듭니다.

차트나 그래프 프로그램을 해보셨으면 시리얼이란 개념이 있습니다.

일반적으로 동적일 경우에는 시리얼을 못구하면 차트나 그래프를 그릴 수가 없습니다.

즉 구역이죠...시리얼을 갯수를 알수 없을 경우에는 먼저 시리얼을 구하는 쿼리는 구합니다.

구후 본 쿼리의 SELECT 구역1, 구역2, 구역3.................을 만들죠.

어플리케이션으로 만들어도 되고 다이나믹SQL로 하셔도 되구요.

 

 

 

 

 

나상숙(kduimux)님이 2012-11-29 12:40에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39843replace function 도움 요청.... [1]
김동길
2012-12-04
6292
39829connect by 질문 [2]
최인수
2012-12-03
7339
39825범위비교 쿼리 질문드립니다. [1]
김완경
2012-11-29
6321
39824조언부탁드립니다. [1]
부족한타블로
2012-11-29
6172
39823쿼리문의드립니다. [2]
슈펭
2012-11-29
6618
39822SQL 초고수에게 묻고싶습니다. [2]
나상숙
2012-11-28
6431
39819IN 쿼리가 잘안되는데요..ㅠㅠ [2]
초보
2012-11-28
5983
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다