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 40563 게시물 읽기
No. 40563
쿼리 질문 드립니다.
작성자
야간비행(야간비행)
작성일
2014-08-26 17:32ⓒ
2014-08-27 08:16ⓜ
조회수
7,843

 

 

하기와 같이 T,S테이블을 조인해 NEW1테이블과 같이 나타내려 합니다.

 

T테이블 데이터는 모두 보여주고 T테이블을 S테이블과 조인하여  A~G컬럼 그룹으로 묶어  'AGG'  값으로  F컬럼을 나타내어  

H컬럼에 SUM값만 한줄 더 보여주려고 하는데 어떻게 해야할지 문의 드립니다.

 

무식하게 아래처럼 T테이블 과 T,S조인한것의 합계를 UNION ALL해서 보여주면 될거 같긴한데 쿼리가 지저분해지고 더 빠른 수행속도를 낼수 있는가 해서

문의 드립니다.

SELECT  * 

   FROM (

            SELECT T.A, T.B, T.C, T.D, T.E, t.F, T.G, t.h

              FROM T

             UNION ALL

            SELECT T.A, T.B, T.C, T.D, T.E, 'AGG' F, T.G, SUM(T.H)

            FROM T, S

            WHERE T.A = S.A

              AND T.B = S.B

              AND T.C = S.C

              AND T.D = S.D

              AND T.E = S.E

              AND T.F = S.F

              AND T.G = S.G    

              GROUP BY T.A, T.B, T.C, T.D, T.E, T.F, T.G--ROLLUP(T.A, T.B, T.C, T.D, T.E, T.F, T.G)

        )   A

 

 

WITH t AS

(

SELECT 'C4' A,    '373' B, 'TEST' C, 'A01' D, '20140713' E, 'OUT' F, 'K-1' G, 1072 H FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A01',    '20140713',    'OUT',    'K-1',    500 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A01',    '20140713',    'OUT',    'E'    ,1100 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A02',    '20140713',    'OUT',    'K-1',    581 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A02',    '20140713',    'OUT',    'E'    ,815 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A02',    '20140713',    'OUT',    'K-1',    54 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A03',    '20140717',    'OUT',    'K-1',    305 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A03',    '20140717',    'OUT',    'K-1',    900 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A03',    '20140717',    'OUT',    'E'    ,825 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A04',    '20140720',    'OUT',    'E'    ,1088 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A05',    '20140721',    'OUT',    'E'    ,453 FROM dual

)

SELECT *

 FROM T

 

 

WITH S AS

(

SELECT 'C4' A,'373' B, 'TEST' C, 'A01' D, '20140713' E, 'OUT' F, 'K-1' G    FROM dual          

UNION ALL SELECT 'C4',    '373',    'TEST',    'A02',    '20140713',  'OUT', 'E'   FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A03',    '20140717',  'OUT', 'K-1'  FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A04',    '20140720',  'OUT', 'E'   FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A05',    '20140721',  'OUT', 'E'   FROM dual

)

SELECT *

FROM S

  

  

  

WITH NEW1 AS

(

          SELECT 'C4' A,    '373' B, 'TEST' C, 'A01' D, '20140713' E, 'AGG' F, 'K-1' G, 1572 H FROM dual        

UNION ALL SELECT 'C4',    '373',    'TEST',    'A01',    '20140713',    'OUT',    'K-1',  1072  FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A01',    '20140713',    'OUT',    'K-1',  500 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A01',    '20140713',    'OUT',    'E'  ,  1100 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A02',    '20140713',    'AGG',    'E',  815 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A02',    '20140713',    'OUT',    'K-1',  581 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A02',    '20140713',    'OUT',    'E'  ,  815 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A02',    '20140713',    'OUT',    'K-1',  54 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A03',    '20140717',    'AGG',    'K-1',  1205 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A03',    '20140717',    'OUT',    'K-1',  305 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A03',    '20140717',    'OUT',    'K-1',  900 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A03',    '20140717',    'OUT',    'E'  ,  825 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A04',    '20140720',    'AGG',    'E'  ,  1088 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A04',    '20140720',    'OUT',    'E'  ,  1088 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A05',    '20140721',    'AGG',    'E'  ,  453 FROM dual

UNION ALL SELECT 'C4',    '373',    'TEST',    'A05',    '20140721',    'OUT',    'E'  ,  453 FROM dual

)

SELECT *

 FROM NEW1  ;

 

 

 감사합니다.

  

  

  

  

 

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

WITH t AS
(
SELECT 1 pk, 'C4' a, '373' b, 'TEST' c, 'A01' d, '20140713' e, 'OUT' f, 'K-1' g, 1072 h FROM dual
UNION ALL SELECT  2, 'C4', '373', 'TEST', 'A01', '20140713', 'OUT', 'K-1',  500 FROM dual
UNION ALL SELECT  3, 'C4', '373', 'TEST', 'A01', '20140713', 'OUT', 'E'  , 1100 FROM dual
UNION ALL SELECT  4, 'C4', '373', 'TEST', 'A02', '20140713', 'OUT', 'K-1',  581 FROM dual
UNION ALL SELECT  5, 'C4', '373', 'TEST', 'A02', '20140713', 'OUT', 'E'  ,  815 FROM dual
UNION ALL SELECT  6, 'C4', '373', 'TEST', 'A02', '20140713', 'OUT', 'K-1',   54 FROM dual
UNION ALL SELECT  7, 'C4', '373', 'TEST', 'A03', '20140717', 'OUT', 'K-1',  305 FROM dual
UNION ALL SELECT  8, 'C4', '373', 'TEST', 'A03', '20140717', 'OUT', 'K-1',  900 FROM dual
UNION ALL SELECT  9, 'C4', '373', 'TEST', 'A03', '20140717', 'OUT', 'E'  ,  825 FROM dual
UNION ALL SELECT 10, 'C4', '373', 'TEST', 'A04', '20140720', 'OUT', 'E'  , 1088 FROM dual
UNION ALL SELECT 11, 'C4', '373', 'TEST', 'A05', '20140721', 'OUT', 'E'  ,  453 FROM dual

)
, s AS
(
SELECT 'C4' a,'373' b, 'TEST' c, 'A01' d, '20140713' e, 'OUT' f, 'K-1' g FROM dual
UNION ALL SELECT 'C4', '373', 'TEST', 'A02', '20140713', 'OUT', 'E'   FROM dual
UNION ALL SELECT 'C4', '373', 'TEST', 'A03', '20140717', 'OUT', 'K-1' FROM dual
UNION ALL SELECT 'C4', '373', 'TEST', 'A04', '20140720', 'OUT', 'E'   FROM dual
UNION ALL SELECT 'C4', '373', 'TEST', 'A05', '20140721', 'OUT', 'E'   FROM dual
)
SELECT t.a, t.b, t.c, t.d, t.e, t.f, t.g
     , SUM(h) h
  FROM t
     , s
 WHERE t.a = s.a(+)
   AND t.b = s.b(+)
   AND t.c = s.c(+)
   AND t.d = s.d(+)
   AND t.e = s.e(+)
   AND t.f = s.f(+)
   AND t.g = s.g(+)
 GROUP BY t.a, t.b, t.c, t.d, t.e, t.f, t.g
        , s.a
        , ROLLUP(t.pk)
 HAVING (GROUPING(t.pk) = 0 OR s.a IS NOT NULL)
 ORDER BY d, pk NULLS FIRST
;

마농(manon94)님이 2014-08-27 08:23에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40566중복값 평균 내기 [1]
야간비행
2014-09-01
7915
40565테이블 삭제 trigger [1]
권기혁
2014-09-01
7849
40564SQL 데이터 조회시 질문이있습니다... [1]
신동열
2014-08-28
7709
40563쿼리 질문 드립니다. [1]
야간비행
2014-08-26
7843
40561대용량 xml구조 데이타 insert select [1]
json
2014-08-22
9686
40560기간내 해당하는 데이타 추출하기 [1]
너구리
2014-08-22
8638
40559프로시져 속도 향상 문의 드립니다. [5]
야간비행
2014-08-20
9011
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다