데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
seq | 날짜 | 구분 | 품명 | 수량 | 고유번호 |
1 | 14.11.01 | 매출 | 품목1 | 2 | 11011 |
2 | 14.11.01 | 매입 | 품목2 | 10 | 11000 |
3 | 14.11.03 | 매출 | 품목3 | 3 | 11031 |
4 | 14.11.03 | 매출 | 품목1 | 5 | 11012 |
5 | 14.11.03 | 매출 | 품목2 | 5 | 11000 |
6 | 14.11.04 | 매입 | 품목2 | 30 | 11001 |
7 | 14.11.04 | 매입 | 품목1 | 100 | 11012 |
8 | 14.11.05 | 매출 | 품목1 | 4 | 11011 |
9 | 14.11.06 | 매출 | 품목1 | 3 | 11012 |
10 | 14.11.06 | 매출 | 품목2 | 2 | 11000 |
위와 같은 값이 있을때
다음과 같은 두개의 결과값을 얻으려면 어떻게 쿼리를 날려야 할까요?
결과1
고유번호 | 입고수량 | 출고수량 | 현재수량(입고-출고) | |
11000 | 4 | -4 | ||
11001 | 30 | 30 | ||
. | ||||
. | ||||
. |
결과2
품명 | 고유번호 | 입고수량 | 출고수량 | 현재수량 |
품목1 | 11011 | 6 | -6 | |
품목1 | 11012 | 100 | 8 | 92 |
품목2 | 11000 | 10 | 7 | 3 |
품목2 | 11001 | 30 | 30 |
.
.
.
Comment 3
-
이리
2014.11.21 15:07
-
뇽이
2014.11.21 16:03
이리님..한가지만 추가로 여쭤봐도 될까요? 위 와 동일한 구조의 테이블이 년도별로 있을때
모든 테이블을 합산해서 보려면 어떻게 해야 할까요?
예를 들어 위와 같은 테이블이 년도별로
10, 11, 12,13,14 처럼 테이블명이 되어있다면...
위 쿼리를 년도별 쿼리를 날리는 것이 아니라,
여러개의 년도별 테이블을 한번에 조회하는 쿼리요
위 쿼리를 테이블별로
union all 을 해서 사용하면 되겠지만 그 방식 말고 다른 방법이 있을까요?
-
이리
2014.11.21 18:58
유니온을 쓰셔야 할 거 같습니다.
WITH Tbl_Test(seq, 날짜, 구분, 품명, 수량, 고유번호)
AS
(
SELECT 1, '14.11.01', '매출', '품목1', 2, 11011
UNION ALL
SELECT 2, '14.11.01', '매입', '품목2', 10, 11000
UNION ALL
SELECT 3, '14.11.03', '매출', '품목3', 3, 11031
UNION ALL
SELECT 4, '14.11.03', '매출', '품목1', 5, 11012
UNION ALL
SELECT 5, '14.11.03', '매출', '품목2', 5, 11000
UNION ALL
SELECT 6, '14.11.04', '매입', '품목2', 30, 11001
UNION ALL
SELECT 7, '14.11.04', '매입', '품목1', 100, 11012
UNION ALL
SELECT 8, '14.11.05', '매출', '품목1', 4, 11011
UNION ALL
SELECT 9, '14.11.06', '매출', '품목1', 3, 11012
UNION ALL
SELECT 10, '14.11.06', '매출', '품목2', 2, 11000
)
SELECT 고유번호
, SUM(ISNULL(CASE 구분 WHEN '매입' THEN 수량 END, 0)) AS 입고수량
, SUM(ISNULL(CASE 구분 WHEN '매출' THEN 수량 END, 0)) AS 출고수량
, SUM((ISNULL(CASE 구분 WHEN '매입' THEN 수량 END, 0)) - (ISNULL(CASE 구분 WHEN '매출' THEN 수량 END, 0))) AS [현재수량(입고-출고)]
FROM Tbl_Test
GROUP BY 고유번호
ORDER BY 고유번호
-- 결과2
WITH Tbl_Test(seq, 날짜, 구분, 품명, 수량, 고유번호)
AS
(
SELECT 1, '14.11.01', '매출', '품목1', 2, 11011
UNION ALL
SELECT 2, '14.11.01', '매입', '품목2', 10, 11000
UNION ALL
SELECT 3, '14.11.03', '매출', '품목3', 3, 11031
UNION ALL
SELECT 4, '14.11.03', '매출', '품목1', 5, 11012
UNION ALL
SELECT 5, '14.11.03', '매출', '품목2', 5, 11000
UNION ALL
SELECT 6, '14.11.04', '매입', '품목2', 30, 11001
UNION ALL
SELECT 7, '14.11.04', '매입', '품목1', 100, 11012
UNION ALL
SELECT 8, '14.11.05', '매출', '품목1', 4, 11011
UNION ALL
SELECT 9, '14.11.06', '매출', '품목1', 3, 11012
UNION ALL
SELECT 10, '14.11.06', '매출', '품목2', 2, 11000
)
SELECT 품명
, 고유번호
, SUM(ISNULL(CASE 구분 WHEN '매입' THEN 수량 END, 0)) AS 입고수량
, SUM(ISNULL(CASE 구분 WHEN '매출' THEN 수량 END, 0)) AS 출고수량
, SUM((ISNULL(CASE 구분 WHEN '매입' THEN 수량 END, 0)) - (ISNULL(CASE 구분 WHEN '매출' THEN 수량 END, 0))) AS [현재수량(입고-출고)]
FROM Tbl_Test
GROUP BY 품명, 고유번호
ORDER BY 품명, 고유번호