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 40330 게시물 읽기
No. 40330
outter조인을 할 수 없는 커리문이라서 문의 드립니다.
작성자
야간비행(야간비행)
작성일
2013-12-06 16:06ⓒ
2013-12-06 17:34ⓜ
조회수
7,842

outter조인을 할 수 없는 커리문이라서 문의 드립니다.

하기의 t2테이블 처럼 데이터가 나오려면 어떻게 하는게 가장 좋을까요??

 

 

 

 WITH T1(KEY1, KEY2, KEY3 ) AS(

SELECT 'A' KEY1, 'TEST01' KEY2 , 10 AS KEY3  FROM DUAL UNION ALL 

SELECT 'A', 'TEST03', 40 FROM DUAL UNION ALL

SELECT 'B', 'TEST02', 15 FROM DUAL UNION ALL

SELECT 'B', 'TEST03', 25 FROM DUAL UNION ALL

SELECT 'C', 'TEST03', 5 FROM DUAL

)

 SELECT *

   FROM T1; 

  

WITH T2(KEY1, KEY2, KEY3 ) AS(

SELECT 'A' KEY1, 'TEST01', 10 AS KEY3  FROM DUAL UNION ALL 

SELECT 'A', 'TEST02', 0 FROM DUAL UNION ALL

SELECT 'A', 'TEST03', 40 FROM DUAL UNION ALL

SELECT 'B', 'TEST01', 0 FROM DUAL UNION ALL

SELECT 'B', 'TEST02', 15 FROM DUAL UNION ALL

SELECT 'B', 'TEST03', 25 FROM DUAL UNION ALL

SELECT 'C', 'TEST01', 0 FROM DUAL UNION ALL

SELECT 'C', 'TEST02', 0 FROM DUAL UNION ALL

SELECT 'C', 'TEST03', 5 FROM DUAL

)

SELECT * 

   FROM T2

 

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

WITH T1 AS (
SELECT 'A' K1, 1 AS K2  FROM dual UNION ALL
SELECT 'A', 2 FROM dual UNION ALL
SELECT 'A', 3 FROM dual UNION ALL
SELECT 'B', 1 FROM dual UNION ALL
SELECT 'B', 2 FROM dual UNION ALL
SELECT 'C', 1 FROM duaL
)
SELECT T1.K1, T2.LV FROM T1 , (SELECT LEVEL AS LV FROM DUAL CONNECT BY LEVEL <= 3) T2
GROUP BY T1.K1 , T2.LV
ORDER BY T1.K1

박성빈(빈이님)님이 2013-12-06 16:24에 작성한 댓글입니다.

 감사합니다. 

박성빈님..뒤에 key2가 숫자가 아닌 문자열로 바꿔야 할거 같아 본문 내용 수정합니다.

 

야간비행(야간비행)님이 2013-12-06 16:36에 작성한 댓글입니다.
이 댓글은 2013-12-06 16:36에 마지막으로 수정되었습니다.

문자열로 변경하였습니다~_~;;;;

WITH T1 AS (
SELECT 'A' K1, 'TEST01' AS K2  FROM dual UNION ALL
SELECT 'A', 'TEST02' FROM dual UNION ALL
SELECT 'A', 'TEST03' FROM dual UNION ALL
SELECT 'B', 'TEST02' FROM dual UNION ALL
SELECT 'B', 'TEST03' FROM dual UNION ALL
SELECT 'C', 'TEST03' FROM duaL
 )
SELECT T1.K1, T2.K2 FROM T1 , (SELECT K2 FROM T1 GROUP BY K2) T2
GROUP BY T1.K1, T2.K2 ;

박성빈(빈이님)님이 2013-12-06 16:55에 작성한 댓글입니다.

 박성빈님 정말 죄송합니다. key3 컬럼을 하나더 추가 하고 싶습니다.

숫자 컬럼으로써 값이 없을때는 0로 표현해주고 싶습니다.

야간비행(야간비행)님이 2013-12-06 17:26에 작성한 댓글입니다.

퇴근해야해서 급하게 만들어봤어요;;

아마 맞을꺼에요;;

근데 데이터량을 생각 안하고 만든거라;;; 속도는 ;;;

 

WITH T1 AS (
SELECT 'A' K1, 'TEST01' K2 , 10 AS K3  FROM DUAL UNION ALL
SELECT 'A', 'TEST03', 40 FROM DUAL UNION ALL
SELECT 'B', 'TEST02', 15 FROM DUAL UNION ALL
SELECT 'B', 'TEST03', 25 FROM DUAL UNION ALL
SELECT 'C', 'TEST03', 5 FROM DUAL
  )
 SELECT A.K1
            , B.K2
            , NVL((SELECT K3 FROM T1 C WHERE C.K1 = A.K1 AND C.K2 = B.K2 AND ROWNUM = 1), 0) AS CNT
 FROM T1 A, (SELECT K2 FROM T1 GROUP BY K2) B
 GROUP BY A.K1, B.K2 ;

 

박성빈(빈이님)님이 2013-12-06 18:04에 작성한 댓글입니다.

-- 1. Partition Outer Join --
SELECT b.key1
     , a.key2
     , NVL(b.key3, 0) key3
  FROM (SELECT 'TEST01' key2 FROM dual
        UNION ALL SELECT 'TEST02' FROM dual
        UNION ALL SELECT 'TEST03' FROM dual
        ) a
  LEFT OUTER JOIN t1 b
 PARTITION BY (b.key1)
    ON a.key2 = b.key2
 ORDER BY key1, key2
;

-- 2. Model --
SELECT *
  FROM t1
 MODEL
 PARTITION BY (key1)
 DIMENSION BY (key2)
 MEASURES (key3)
 IGNORE NAV
 RULES(key3[FOR key2 IN ('TEST01', 'TEST02', 'TEST03')] = key3[CV()])
 ORDER BY key1, key2
;

마농(manon94)님이 2013-12-06 18:17에 작성한 댓글입니다.

 한가지만 더 여쭙겠습니다.

아래처럼 KEY1 또는 KEY2가 null이 들어올때는 KEY3값이 모두 나오지 않는거 같습니다.

모두 나오게 하려면 어떻게 해야할지 문의 드립니다.

 

 

 

WITH T2(KEY1, KEY2, KEY3 ) AS(

SELECT 'A' KEY1, 'TEST01', 10 AS KEY3  FROM DUAL UNION ALL 

SELECT 'A', 'TEST02', 0 FROM DUAL UNION ALL

SELECT 'A', 'TEST03', 40 FROM DUAL UNION ALL

SELECT 'B', 'TEST01', 0 FROM DUAL UNION ALL

SELECT 'B', NULL, 15 FROM DUAL UNION ALL

SELECT 'B', 'TEST03', 25 FROM DUAL UNION ALL

SELECT 'C', 'TEST01', 0 FROM DUAL UNION ALL

SELECT 'C', 'TEST02', 0 FROM DUAL UNION ALL

SELECT 'C', 'TEST03', 5 FROM DUAL

)

 SELECT A.KEY1

            , B.KEY2

            , NVL((SELECT KEY3 FROM T2 C WHERE C.KEY1 = A.KEY1 AND C.KEY2 = B.KEY2 AND ROWNUM = 1), 0) AS CNT

 FROM T2 A, (SELECT KEY2 FROM T2 GROUP BY KEY2) B

 GROUP BY A.KEY1, B.KEY2 

ORDER BY KEY1,KEY2;

 

 

 

 

 

 

야간비행(야간비행)님이 2013-12-09 12:21에 작성한 댓글입니다.

한가지만 더 여쭙겠습니다.

아래처럼 KEY1 또는 KEY2가 null이 들어올때는 KEY3값이 모두 나오지 않는거 같습니다.

모두 나오게 하려면 어떻게 해야할지 문의 드립니다.

 

이게 무슨 얘기이신지 잘 모르겠네요 원하시는 형태를 얘기해주세요;;;

박성빈(빈이님)님이 2013-12-09 17:58에 작성한 댓글입니다.

 

 
WITH T2(KEY1, KEY2, KEY3 ) AS(
SELECT 'A' KEY1, 'TEST01', 10 AS KEY3  FROM DUAL UNION ALL 
SELECT 'A', 'TEST02', 0 FROM DUAL UNION ALL
SELECT 'A', 'TEST03', 40 FROM DUAL UNION ALL
SELECT 'B', 'TEST01', 0 FROM DUAL UNION ALL
SELECT 'B', NULL, 15 FROM DUAL UNION ALL
SELECT 'B', 'TEST03', 25 FROM DUAL UNION ALL
SELECT 'C', 'TEST01', 0 FROM DUAL UNION ALL
SELECT 'C', 'TEST02', 0 FROM DUAL UNION ALL
SELECT 'C', 'TEST03', 5 FROM DUAL
)
 SELECT A.KEY1
            , B.KEY2
            , NVL((SELECT KEY3 FROM T2 C WHERE C.KEY1 = A.KEY1 AND C.KEY2 = B.KEY2 AND ROWNUM = 1), 0) AS CNT
 FROM T2 A, (SELECT KEY2 FROM T2 GROUP BY KEY2) B
 GROUP BY A.KEY1, B.KEY2 
ORDER BY KEY1,KEY2;
 
이쿼리를 실행해보면 Key1 B에 해당하는 key2가 null일때 key3값 15가 조회되지 않습니다. 이부분을 여쭤본겁니다. ^^;
야간비행(야간비행)님이 2013-12-10 09:41에 작성한 댓글입니다.

이렇게 나오면 되나요?

 

WITH T2 AS(
SELECT 'A' KEY1, 'TEST01' as KEY2, 10 AS KEY3  FROM DUAL UNION ALL
SELECT 'A', 'TEST02', 0 FROM DUAL UNION ALL
SELECT 'A', 'TEST03', 40 FROM DUAL UNION ALL
SELECT 'B', 'TEST01', 0 FROM DUAL UNION ALL
SELECT 'B', NULL, 15 FROM DUAL UNION ALL
SELECT 'B', 'TEST03', 25 FROM DUAL UNION ALL
SELECT 'C', 'TEST01', 0 FROM DUAL UNION ALL
SELECT 'C', 'TEST02', 0 FROM DUAL UNION ALL
SELECT 'C', 'TEST03', 5 FROM DUAL
)
SELECT A.KEY1
           , B.KEY2
           , CASE WHEN B.KEY2 IS NULL
           THEN NVL((SELECT KEY3 FROM T2 C WHERE C.KEY1 = A.KEY1 AND C.KEY2 IS NULL AND ROWNUM = 1), 0)
           ELSE NVL((SELECT KEY3 FROM T2 C WHERE C.KEY1 = A.KEY1 AND C.KEY2 = B.KEY2 AND ROWNUM = 1), 0) END  AS CNT
FROM T2 A, (SELECT KEY2 FROM T2 GROUP BY KEY2) B
GROUP BY A.KEY1, B.KEY2
ORDER BY KEY1,KEY2;

박성빈(빈이님)님이 2013-12-10 10:54에 작성한 댓글입니다.

 와우..^^; 

감사합니다. 박성빈님

또 마농님^^;

야간비행(야간비행)님이 2013-12-10 13:48에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40334알파벳,숫자 조합 순차 채번 문의 [3]
등촌블루스
2013-12-10
8688
40332select 후 insert 질문 드립니다 [5]
진현철
2013-12-09
7007
40331계층구조 상위 집계 방법에 대하여 문의드립니다. [6]
김흥수
2013-12-06
7793
40330outter조인을 할 수 없는 커리문이라서 문의 드립니다. [11]
야간비행
2013-12-06
7842
40329select 할때 order by 질문 드립니다 [7]
진현철
2013-12-06
6862
40328서로 다른 seq를 가진 데이터를 조회하려고 합니다. [5]
초봉이
2013-12-05
5883
40327delete 시 ORA-30036 에러문제 [1]
정재영
2013-12-04
6499
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다