創建表tb(
ID int標識主鍵,
項目varchar (10),-產品編號
Quantityint,-交易數量
Flagbit,-交易標誌,1代表入庫,0代表出庫,可以有效區分退貨(負數)。
日期日期時間)-交易日期
插入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 '
聯合所有選擇' 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 '
工會全選' 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 '抄送',100,1,' 2005-1-7 '
去
-查詢時間段定義
聲明@dt1日期時間,@dt2日期時間
選擇@dt1='2005-2-1 ',@dt2='2005-2-10 '
-查詢
-統計時間段內沒有的數據量(如果該查詢不需要,則刪除該查詢)
選擇項目,
Date=CONVERT(char(10),@dt1,120),
期初=總和(當Flag=1時,則數量否則-數量結束),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
余額=總和(當Flag=1時,則數量否則-數量結束)
來自tb a
其中日期& lt@dt1且不存在(
SELECT * FROM tb其中Item=a .項目和日期& gt@dt1和日期& ltDATEADD(Day,1,@dt2))
按項目分組
聯合所有
-特定時期內的交易數據。
選擇項目,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL(選擇SUM(當Flag=1時,則數量為ELSE-數量結束)
從tb開始,其中Item=a .項目和日期& lt分鐘(日期))、0),
[IN]= is null(SUM(Flag = 1且Quantity & gt0則數量結束),0),
[IN _ Retrun]= is null(SUM(Flag = 1且Quantity & lt0 THEN-數量結束),0),
[OUT]=ISNULL(SUM(當Flag=0且Quantity & gt0則數量結束),0),
[OUT _ Return]= is null(SUM(Flag = 0且Quantity & lt0 THEN-數量結束),0),
Balance=ISNULL(選擇SUM(如果Flag=1,則數量為ELSE-數量結束)
從tb開始,其中Item=a .項目和日期& lt=MAX(日期),0)
來自tb a
其中日期& gt=@dt1和日期& ltDATEADD(Day,1,@dt2)
GROUP BY CONVERT(字符(10),日期,120),項目
按項目、日期排序
/*-結果
項目日期期初IN _ Retrun OUT OUT _ Return余額
- - - - - - - -
aa 2005-02-01100 180 55 0225
aa 2005-02-02 225 200 10 0 415
aa 2005-02-03 465438
bb 2005-02-02 095 00 95
bb 2005-02-03
30 0 15 0 20 35
35 100 0 135
cc 2005-02-01 100 0 0 0 100
- */
Itjob祝妳成功。