示ä¾å¦ä¸ï¼
--æç»å¸æ°æ®
CREATE TABLE tb(
ID int IDENTITY PRIMARY KEY,
Item varchar(10), --产åç¼å·
Quantity int, --交ææ°é
Flag bit, --交ææ å¿,1代表å
¥åº,0代表åºåº,è¿æ ·å¯ä»¥ææåºåéè´§(è´æ°)
Date datetime) --交ææ¥æ
INSERT tb SELECT 'aa',100,1,'2005-1-1'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'aa',55 ,0,'2005-2-1'
UNION ALL SELECT 'aa',-10,1,'2005-2-2'
UNION ALL SELECT 'aa',-5 ,0,'2005-2-3'
UNION ALL SELECT 'aa',200,1,'2005-2-2'
UNION ALL SELECT 'aa',90 ,1,'2005-2-1'
UNION ALL SELECT 'bb',95 ,1,'2005-2-2'
UNION ALL SELECT 'bb',65 ,0,'2005-2-3'
UNION ALL SELECT 'bb',-15,1,'2005-2-5'
UNION ALL SELECT 'bb',-20,0,'2005-2-5'
UNION ALL SELECT 'bb',100,1,'2005-2-7'
UNION ALL SELECT 'cc',100,1,'2005-1-7'
GO
--æ¥è¯¢æ¶é´æ®µå®ä¹
DECLARE @dt1 datetime,@dt2 datetime
SELECT @dt1='2005-2-1',@dt2='2005-2-10'
--æ¥è¯¢
--ç»è®¡æ¶é´æ®µå
æ åçé¢çæ°æ®(å¦æè¿ä¸ªä¸æ¯æ¥è¯¢éè¦ç,å»æè¿æ®µæ¥è¯¢)
SELECT Item,
Date=CONVERT(char(10),@dt1,120),
Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
Balance=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb a
WHERE Date<@dt1 AND NOT EXISTS(
SELECT * FROM tb WHERE Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
GROUP BY Item
UNION ALL
--æå®æ¶é´æ®µå
æ交æåççæ°æ®
SELECT Item,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<MIN(a.Date)),0),
[IN]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),0),
[IN_Retrun]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),0),
[OUT]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),0),
[OUT_Return]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),0),
Balance=ISNULL((SELECT SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb WHERE Item=a.Item AND Date<=MAX(a.Date)),0)
FROM tb a
WHERE Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
GROUP BY CONVERT(char(10),Date,120),Item
ORDER BY Item,Date
/*--ç»æ
Item Date Opening IN IN_Retrun OUT OUT_Return Balance
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- -----------
aa 2005-02-01 100 180 0 55 0 225
aa 2005-02-02 225 200 10 0 0 415
aa 2005-02-03 415 0 0 0 5 420
bb 2005-02-02 0 95 0 0 0 95
bb 2005-02-03 95 0 0 65 0 30
bb 2005-02-05 30 0 15 0 20 35
bb 2005-02-07 35 100 0 0 0 135
cc 2005-02-01 100 0 0 0 0 100
--*/
温馨提示:答案为网友推荐,仅供参考