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 40570 게시물 읽기
No. 40570
쿼리 질문 드려봅니다.
작성자
야간비행(야간비행)
작성일
2014-09-15 16:05ⓒ
2014-09-15 16:11ⓜ
조회수
7,913
하기와 같이 A,B테이블을 이용해 C테이블의 결과를 내고 싶습니다.
어떻게 하면 될지 문의 드려 봅니다.
감사합니다.
 
 
WITH A AS
SELECT 'A01' A,    'B01' B,   'C01' C ,   'D01' D,   'E01'  E,  'PMT' F ,  200 G,   0 H FROM DUAL UNION ALL
SELECT 'A01' A,    'B01' B,   'C01' C ,   'D01' D,   'E01'  E,  'PMT' F ,  1 G  ,   0 H FROM DUAL UNION ALL
SELECT 'A01' A,    'B01' B,   'C01' C ,   'D01' D,   'E01'  E,  'PMT' F ,  52 G ,   0 H FROM DUAL UNION ALL
SELECT 'A01' A,    'B01' B,   'C01' C ,   'D01' D,   'E02'  E,  'PMT' F ,  21 G ,   5 H FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B,   'C02' C ,   'D02' D,   'E03'  E,  'PMT' F ,  600 G,   0 H FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B,   'C02' C ,   'D02' D,   'E03'  E,  'PMT' F ,  71 G  ,   0 H FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B,   'C02' C ,   'D02' D,   'E03'  E,  'PMT' F ,  5 G ,   0 H FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B,   'C02' C ,   'D02' D,   'E04'  E,  'PMT' F ,  36 G ,   3 H FROM DUAL
)
SELECT *
  FROM A;
 
 
WITH B AS
(
SELECT 'A01' A,    'B01' B,   'C01' C,    'D01' D,   'E02'  E,  'PMT' F FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B,   'C02' C,    'D02' D,   'E04'  E,  'KBS' F FROM DUAL
)
SELECT *
  FROM B;
                         
 
WITH C AS
(
SELECT 'A01' A,    'B01' B   ,'C01' C  ,  'D01' D  , 'E02'  E , 'AGG' F, 21 G, 5 H FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B   ,'C02' C  ,  'D02' D  , 'E04'  E , 'AGG' F, 0 G, 0 H FROM DUAL
)
SELECT *
  FROM C;  
 
이 글에 대한 댓글이 총 5건 있습니다.

 아래와 같이 해봤습니다. ㅠㅠ

 
SELECT A, B,C,D,E,F
     , NVL((SELECT MAX(G) FROM A WHERE A = a.A
                           AND a.B = b.B
      AND a.C = b.C
      AND a.D = b.D
      AND a.E = b.E
      AND a.F = b.F     
        ),0) G
     , NVL((SELECT MAX(H) FROM A WHERE A = a.A
                           AND a.B = b.B
      AND a.C = b.C
      AND a.D = b.D
      AND a.E = b.E
      AND a.F = b.F     
        ),0) H   
  FROM B
야간비행(야간비행)님이 2014-09-15 18:17에 작성한 댓글입니다.

SELECT b.a, b.b, b.c, b.d, b.e
     --, b.f
     , 'AGG' f
     , NVL(a.g, 0) g
     , NVL(a.h, 0) h
  FROM a
     , b
 WHERE a.a(+) = b.a
   AND a.b(+) = b.b
   AND a.c(+) = b.c
   AND a.d(+) = b.d
   AND a.e(+) = b.e
   AND a.f(+) = b.f
;

마농(manon94)님이 2014-09-15 18:21에 작성한 댓글입니다.
WITH A AS
(
SELECT 'A01' A,    'B01' B,   'C01' C ,   'D01' D,   'E01'  E,  'PMT' F ,  200 G,   0 H FROM DUAL UNION ALL
SELECT 'A01' A,    'B01' B,   'C01' C ,   'D01' D,   'E01'  E,  'PMT' F ,  1 G  ,   0 H FROM DUAL UNION ALL
SELECT 'A01' A,    'B01' B,   'C01' C ,   'D01' D,   'E01'  E,  'PMT' F ,  52 G ,   0 H FROM DUAL UNION ALL
SELECT 'A01' A,    'B01' B,   'C01' C ,   'D01' D,   'E02'  E,  'PMT' F ,  215 G ,   65 H FROM DUAL UNION ALL
--
SELECT 'A02' A,    'B02' B,   'C02' C ,   'D02' D,   'E03'  E,  'PMT' F ,  600 G,   0 H FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B,   'C02' C ,   'D02' D,   'E03'  E,  'PMT' F ,  71 G  ,   0 H FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B,   'C02' C ,   'D02' D,   'E03'  E,  'PMT' F ,  56 G ,   0 H FROM DUAL UNION ALL
SELECT 'A02' A,    'B02' B,   'C02' C ,   'D02' D,   'E04'  E,  'PMT' F ,  365 G ,   53 H FROM DUAL UNION ALL
--
SELECT 'A03' A,    'B03' B,   'C03' C ,   'D03' D,   'E03'  E,  'PMT' F ,  500 G,   0 H FROM DUAL UNION ALL
SELECT 'A03' A,    'B03' B,   'C03' C ,   'D03' D,   'E03'  E,  'PMT' F ,  971 G  ,   0 H FROM DUAL UNION ALL
SELECT 'A03' A,    'B03' B,   'C03' C ,   'D03' D,   'E03'  E,  'PMT' F ,  35 G ,   0 H FROM DUAL UNION ALL
SELECT 'A03' A,    'B03' B,   'C03' C ,   'D03' D,   'E05'  E,  'PMT' F ,  785 G ,   33 H FROM DUAL
),
B AS(
SELECT 'A01' A,    'B01' B,   'C01' C,    'D01' D,   'E02'  E,  'PMT' F FROM DUAL UNION ALL --나와야 함
SELECT 'A02' A,    'B02' B,   'C02' C,    'D02' D,   'E04'  E,  'KBS' F FROM DUAL UNION ALL --나와야 함
SELECT 'A03' A,    'B03' B,   'C03' C,    'D03' D,   'E05'  E,  'PMT' F FROM DUAL UNION ALL --나와야 함
--
SELECT 'A01' A,    'B01' B,   'C01' C,    'D01' D,   'E06'  E,  'PMT2' F FROM DUAL UNION ALL --안나와야 함
SELECT 'A01' A,    'B01' B,   'C01' C,    'D01' D,   'E07'  E,  'PMT2' F FROM DUAL UNION ALL --안나와야 함
SELECT 'A01' A,    'B01' B,   'C01' C,    'D01' D,   'E08'  E,  'PMT2' F FROM DUAL UNION ALL --안나와야 함
SELECT 'A01' A,    'B01' B,   'C01' C,    'D01' D,   'E09'  E,  'PMT2' F FROM DUAL --안나와야 함
)
SELECT B.A, B.B, B.C, B.D, B.E
     --, b.f
     , 'AGG' F
     , NVL(A.G, 0) G
     , NVL(A.H, 0) H
  FROM A
     , B
 WHERE A.A(+) = B.A
   AND A.B(+) = B.B
   AND A.C(+) = B.C
   AND A.D(+) = B.D
   AND A.E(+) = B.E
   AND A.F(+) = B.F   
;
야간비행(야간비행)님이 2014-09-15 20:11에 작성한 댓글입니다.
이 댓글은 2014-09-15 21:35에 마지막으로 수정되었습니다.

 위 쿼리문 처럼 B테이블의 갯수가 늘어나니 Pk값이 일치 하지 않는 모든 값들이 다 보여 집니다.

A,B,C,D,E를 키값으로 F 값이 같으면 A테이블의 g,h값을 보여주고 F값이 다를경우 0,0으로 보여주려하는데

B테이블의 값이 많아져 여러개가 중복되 보여 집니다.

한줄만 보여줄 방법 없을까요....

야간비행(야간비행)님이 2014-09-16 01:13에 작성한 댓글입니다.

SELECT b.a, b.b, b.c, b.d, b.e
     , b.f
     , NVL(SUM(DECODE(b.f, a.f, a.g)), 0) g
     , NVL(SUM(DECODE(b.f, a.f, a.h)), 0) h
  FROM a
     , b
 WHERE a.a = b.a
   AND a.b = b.b
   AND a.c = b.c
   AND a.d = b.d
   AND a.e = b.e
 GROUP BY b.a, b.b, b.c, b.d, b.e, b.f
 ORDER BY a, b, c, d, e, f
;

마농(manon94)님이 2014-09-16 08:21에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40575PL/SQL 커서 구문 오류가 납니다.. [1]
salary1111
2014-09-22
7827
40574토드 clob데이터 import질문
야간비행
2014-09-21
7686
40572inline view에서 인덱스가 가능할까요? [1]
사이살리스
2014-09-17
7021
40570쿼리 질문 드려봅니다. [5]
야간비행
2014-09-15
7913
40569이 두쿼리의 결과가 왜 다른거죠...아우터조인시..
DBA희망자
2014-09-12
7396
40568VIEW에서 사용하고있는 TABLE명을 쿼리로 볼수있나요? [1]
질문
2014-09-11
7080
40567DB사용량을 체크해보자는데 어떻게 해야할까요.ㅠ
helpme
2014-09-02
7569
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다