안녕하세요. having이랑 union all 을 활용해서 총계를 구하기 0 2 741

by 준일정 [Oracle 기초] [2019.01.11 09:34:15]



제가 옛날에 한번 해 본 기억이 있는데... 정확히 기억이 잘 안나네요... 

 

having 조건식 해서 어떻게 했던거 갔는데.. 

혹시 이게 가능할까요? 

 

사용 dbms는 mssql 입니다. 

 

도움 부탁드립니다.

by 마농 [2019.01.11 10:12:52]

가능합니다.
1. 다만 Having 절이 사용될 이유가 전혀 없습니다.
 - 집계 결과에 대한 조건 줄 때 사용함
2. Union All 을 이용할 수는 있지만, 좋은 방법은 아니구요.
 - 일반 결과와 집계 결과를 Union 하여 재정렬
3. ROLLUP 이나 GROUPING SETS 를 이용하시면 됩니다.
 - GROUP BY 입고일자, ROLLUP(품명)
 - GROUP BY GROUPING SETS ( (입고일자, 품명), (입고일자) )
 - http://gurubee.net/article/79561
 

WITH t AS
(
SELECT '장난감' 품명, 2 수량, 1000 금액, '20190101' 입고일자
UNION ALL SELECT '콜라'  , 3, 2000, '20190101'
UNION ALL SELECT '사이다', 4, 3000, '20190101'
UNION ALL SELECT '장갑'  , 5, 4000, '20190101'
UNION ALL SELECT '장난감', 2, 1000, '20190102'
UNION ALL SELECT '콜라'  , 3, 2000, '20190102'
UNION ALL SELECT '사이다', 4, 3000, '20190102'
UNION ALL SELECT '장갑'  , 5, 4000, '20190102'
UNION ALL SELECT '장난감', 2, 1000, '20190103'
UNION ALL SELECT '콜라'  , 3, 2000, '20190103'
UNION ALL SELECT '사이다', 4, 3000, '20190103'
UNION ALL SELECT '장갑'  , 5, 4000, '20190103'
)
SELECT ISNULL(품명, '총계') 품명
     , SUM(수량) 수량
     , SUM(금액) 금액
     , 입고일자
  FROM t
 GROUP BY 입고일자, ROLLUP(품명)
-- GROUP BY GROUPING SETS ( (입고일자, 품명), (입고일자) )
;

 


by 준일정 [2019.01.11 10:26:59]

매번 답변 감사드립니다.!!!! 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입