현재 테이블에 데이터 구조가
코드 |명칭|년월| 입금액|출금액|잔고|
01 가 2013-06 100 0 100
01 가 2013-07 0 50 50
02 나 2013-07 300 0 300
02 나 2013-07 0 220 80
03 나 2013-08 100 0 180
이런식으로 저장이 되있습니다.
년월은 저장시간이라고 따로 있는걸 varchar(7)로 변환해서 앞자리만 따온거구요
제가 원하는 형태는 코드에 해당하는걸 월별로 묶어서 입금액의 합과 출금액의 합 그리고 잔고 상태를 출력하기를 원하는데
코드 |명칭|년월| 입금액|출금액|잔고|
01 가 2013-06 100 0 100
01 가 2013-07 0 50 50
02 나 2013-07 300 220 80
03 나 2013-08 100 0 180
이런식으로 출력되었으면 합니다.
어떻게 해야할까요... 초보라서 잘 모르겠네요
Comment 5
-
건우아빠
2013.09.11 19:22
-
왕만두와우동
2013.09.12 13:34
건우아빠/ 많은 참고가 되었습니다. 감사합니다
헌데
셀렉트문을 임시테이블 res로 만들고
select o.품목코드, o.품명, left(o.전표일자,7) 간략년월, sum(o.입고량) 입고량 , sum(o.입고액) 입고액, sum(o.출고량) 출고량,
sum(o.출고액) 출고액,(SELECT 잔량 FROM #RES WHERE 품목코드 = o.품목코드 AND 품명 = o.품명 AND o.전표일자 = MAX(o.전표일자)) 잔량,
(SELECT 잔액 FROM #RES WHERE 품목코드 = o.품목코드 AND 품명 = o.품명 AND o.전표일자 = MAX(o.전표일자)) 잔액
from #res o
group by o.품목코드,o.품명,left(o.전표일자,7),o.전표일자를 작성해 돌렸더니
하위 쿼리에서 값을 둘 이상 반환했습니다. 하위 쿼리 앞에 =, !=, <, <=, >, >= 등이 오거나 하위 쿼리가 하나의 식으로 사용된 경우에는 여러 값을 반환할 수 없습니다.
가 나오네요. 어디가 문제일까요.. 도와주세요
-
건우아빠
2013.09.12 13:54
동일한 일자에 품목코드, 품명 이 같은게 2개 이상이 나온다는 의미입니다.
전표일자에 2건이상의 자료가 있어서 발생합니다. 데이타를 조회해 보세요...
-
여우비™
2013.09.12 18:50
굳이 Scalar Sub Query를 사용할 필요없이 일자만 년월로 변환하여 잔고도 SUM을 하면 됩니다.SELECT 코드, 명칭, CONVERT(CHAR(7), 일자, 120) AS 년월
, SUM(입금액) AS [입금액], SUM(출금액) AS [출금액], SUM(잔고) AS [잔고]
FROM 테이블명
GROUP BY 코드 , 명칭, CONVERT(CHAR(7), 일자, 120) -
한태
2016.04.07 19:54
create table inout(code int ,name varchar(5),yymm varchar(7),inmon int,outmon int,etcmon int)insert into inout values(1, '가','2016-06', 100,0,100),(1, '가','2016-07', 0,50,50),(2, '나','2016-07', 300,0,300),(2, '나','2016-07', 0,220,800),(3, '나','2016-08', 100,0,180)select code, name, yymm, SUM(inmon) as 입금액,SUM(outmon) as 출금액 ,SUM(inmon) - SUM(outmon) as 잔고from inout with(nolock)group by code,name,yymm잔고를 구하는게 어떤식인지 위아래에서 공통된 점이 없어서 우선은 입금에서 출금액을 뺀 것으로 구했습니다.
년월은 저장시간이 있어야 합니다..
입금액|출금액은 그냥 합을 하면 되지만 잔고는 월별 마지막 저장 시간의 잔고를 가져와야 합니다...
서브쿼리를 이용하시는게 가장 손쉽고 좋을듯 하네요....
/*
WITH RES AS (
SELECT '01' 코드 ,'가' 명칭,'2013-06-01' 년월일 ,100 입금액 , 0 출금액 ,100 잔고 UNION ALL
SELECT '01' ,'가' ,'2013-07-07' , 0 , 50 , 50 UNION ALL
SELECT '02' ,'나' ,'2013-07-03' ,300 , 0 ,300 UNION ALL
SELECT '02' ,'나' ,'2013-07-04' , 0 ,220 , 80 UNION ALL
SELECT '03' ,'나' ,'2013-08-25' ,100 , 0 ,180 )
SELECT *
INTO #RES
FROM RES
*/
SELECT A.코드
, A.명칭
, LEFT(A.년월일,7) 년월
, SUM(A.입금액) 입금액
, SUM(A.출금액) 출금액
, ( SELECT 잔고 FROM #RES WHERE 코드 = A.코드 AND 명칭 = A.명칭 AND 년월일 = MAX(A.년월일) ) 잔고
FROM #RES A
GROUP BY A.코드 , A.명칭, LEFT(A.년월일,7) ;