결과 갯수가 다른 두 데이터 정렬 1 4 1,966

by 송민구 [SQL Query] [2012.02.22 17:56:24]


안녕하세요...초보에게 도움 부탁드립니다.
요약을 하면 아래와 같습니다.

아래와 같이 계획테이터, 실적데이터와 원하는 결과가 있습니다.
즉, 실적이 없더라도 row로는 보이게 하고 싶습니다
union을 써도 안될것 같고, join을 해도 옆으로 나오게 되어 안됩니다.

좋은 의견 부탁드립니다~~~

(계획,실적데이터는 table이 아니고 각각 쿼리를 통해서 얻어진 결과입니다)

계획데이터 
no    qty    type
-----------------------
a       10     plan
b       20     plan 
c       30     plan 
d       40     plan 
e       50     plan 

실적데이터
no    qty    type
-----------------------
b       20    result
c       25    result

보여주고 싶은 결과 형태는 아래와 같습니다

no    qty   type
----------------------
a      10    plan
a        0    result
b      20    plan
b      20    result
c      30    plan
c      25    result
d      40    plan
d        0    result
e      50    plan
e        0    result

by 마농 [2012.02.22 18:20:36]
WITH plan(no, qty, type) AS
(
SELECT 'a', 10, 'plan' FROM dual
UNION ALL SELECT 'b', 20, 'plan' FROM dual
UNION ALL SELECT 'c', 30, 'plan' FROM dual
UNION ALL SELECT 'd', 40, 'plan' FROM dual
UNION ALL SELECT 'e', 50, 'plan' FROM dual
)
, result(no, qty, type) AS
(
SELECT 'b', 20, 'result' FROM dual
UNION ALL SELECT 'c', 25, 'result' FROM dual
)
SELECT d.no
, NVL(d.qty, 0) qty
, c.type
FROM
(
SELECT 1 no, 'plan' type FROM dual
UNION ALL SELECT 2, 'result' FROM dual
) c
LEFT OUTER JOIN
(
SELECT * FROM plan
UNION ALL
SELECT * FROM result
) d
PARTITION BY (d. no)
ON c.type = d.type
;

by 송민구 [2012.02.22 18:30:35]
아하...plan과 result셋을 따로 하나 만들면 되는군요...그리고 join이라..
멋지십니다 ㅎ 감사합니다~

by 마농 [2012.02.23 10:07:57]
SELECT *
FROM
(
SELECT * FROM plan
UNION ALL
SELECT * FROM result
)
PIVOT (SUM(qty) FOR type IN ('plan' plan, 'result' result))
UNPIVOT INCLUDE NULLS (qty FOR type IN (plan, result))
ORDER BY no, type
;

by 마농 [2012.02.23 11:25:22]
SELECT no, qty, type
FROM
(
SELECT * FROM plan
UNION ALL
SELECT * FROM result
)
MODEL
PARTITION BY (no)
DIMENSION BY (type)
MEASURES (qty)
IGNORE NAV
RULES
( qty['plan'] = qty[CV()]
, qty['result'] = qty[CV()]
)
ORDER BY no, type
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입