쿼리 결과에 더미 로우를 넣는 데 대한 질문입니다. 0 3 1,602

by 지누기 [2013.08.26 16:27:47]


진료과 구분 결과수치
감염내과 A 36
감염내과 B 12
내과 A 20
내과 B 2
류마티스내과 A 4
마취의학과 A 6
마취의학과 B 2
비뇨기과 A 4
비뇨기과 B 2



다음과 같은 쿼리 결과가 있습니다. 

진료과별로 A, B 구분이 나올 수 있도록 처리해야 하는데, 과별로 A 구분만, 혹은 B 구분만 있는 

데이터가 발생하여 조회 시 데이터가 이빨이 빠져서 나옵니다.

그리하여, 

진료과 구분 결과수치
감염내과 A 36
감염내과 B 12
내과 A 20
내과 B 2
류마티스내과 A 4
류마티스내과 B 0
마취의학과 A 6
마취의학과 B 2
비뇨기과 A 4
비뇨기과 B 2

위의 색칠한 로우와 같이 구분이 하나만 있는 과의 경우에

결과수치를 0으로 하는 더미로우를 추가해서 과별로

2건의 로우를 가지도록 맞추려고 하는데, 

이를 쿼리로 표현하려니 실력에 부칩니다. 여러분의 의견

부탁드립니다.

by 용근님 [2013.08.26 16:32:21]

partition outer join 으로 검색해보세요


by 마농 [2013.08.26 16:42:42]
WITH t AS
(
SELECT '감염내과' dept, 'A' gb, 36 v FROM dual
UNION ALL SELECT '감염내과'    , 'B', 12 FROM dual
UNION ALL SELECT '내과'        , 'A', 20 FROM dual
UNION ALL SELECT '내과'        , 'B',  2 FROM dual
UNION ALL SELECT '류마티스내과', 'A',  4 FROM dual
UNION ALL SELECT '마취의학과'  , 'A',  6 FROM dual
UNION ALL SELECT '마취의학과'  , 'B',  2 FROM dual
UNION ALL SELECT '비뇨기과'    , 'A',  4 FROM dual
UNION ALL SELECT '비뇨기과'    , 'B',  2 FROM dual
)
-- 1. Partition Outer Join --
SELECT dept
     , c.gb
     , NVL(t.v, 0) v
  FROM (SELECT 'A' gb FROM dual UNION ALL SELECT 'B' FROM dual) c
  LEFT OUTER JOIN t
  PARTITION BY (t.dept)
    ON c.gb = t.gb
;
-- 2. Model --
SELECT *
  FROM t
 MODEL
 PARTITION BY (dept)
 DIMENSION BY (gb)
 MEASURES (v)
 IGNORE NAV
 RULES (v[FOR gb IN ('A', 'B')] = v[cv()])
;

by 지누기 [2013.08.26 16:52:21]
감사합니다 용근님, 마농님. 항상 많이 배우고 있습니다 ^^ 좋은 하루 되세요~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입