我现在有这样几张表:
1)入库表(产品名称,产品规格,产品批号,件数,总重量,仓库,入库方式)其中入库方式分生产收入和其它收入
2)出库表(产品名称,产品规格,产品批号,件数,总重量,仓库,出库方式)其中出库方式分公路销售和铁路销售
3)盘点表(盘点日期,产品名称.产品规格,产品批号,件数,上期末数量,仓库)问能否由这个三个表生成一种类似于下面结构的盘点单
产品名称,产品规格,产品批号,上期末的库存,生产收入,其它收入,公路销售,铁路销售,期末库存其中期末库存=上期末的库存+生产收入+其它收入-公路销售-铁路销售再把此次结算的期末库存写入到上面的3)盘点表里.sql语句应该怎么写?谢谢,感动中!!!!
1)入库表(产品名称,产品规格,产品批号,件数,总重量,仓库,入库方式)其中入库方式分生产收入和其它收入
2)出库表(产品名称,产品规格,产品批号,件数,总重量,仓库,出库方式)其中出库方式分公路销售和铁路销售
3)盘点表(盘点日期,产品名称.产品规格,产品批号,件数,上期末数量,仓库)问能否由这个三个表生成一种类似于下面结构的盘点单
产品名称,产品规格,产品批号,上期末的库存,生产收入,其它收入,公路销售,铁路销售,期末库存其中期末库存=上期末的库存+生产收入+其它收入-公路销售-铁路销售再把此次结算的期末库存写入到上面的3)盘点表里.sql语句应该怎么写?谢谢,感动中!!!!
解决方案 »
- 删除7天前的记录,怎么不行??参数错!
- mysql如何执行一个已经写好的sql脚本文件?
- 用xp_sendmail发送邮件,如何使邮件正文换行?
- 请问实现无限无类用什么方法实现能达到最高效率?
- 快疯了.求救set SET ROWCOUNT 在游标下的问题
- ******列转行问题
- Microsoft SQL Server 2005 用户'sa'登录失败(错误18456)
- 一个小SQL语句问题,一个时间段内的字段差值
- 在SQL SERVER中可以更改数据库的名称吗?请指教!
- SQL高手请进,很需要你的帮忙,谢谢啦
- 如何解决Connection is busy with results for another hstmt问题?
- sql异常处理
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
--*/
CKID 出库日期 单据号 经办人 出库方式 收货单位 产品名称 包装规格 产品批号 件数 总重量(吨)
CK-20091120-100 2009-11-20 51235 dd 槽车 兰州 高滴点麻芯脂 180Kg/件 20091104 528 95.04
CK-20091119-100 2009-11-19 13131 dd 槽车 新疆 2号HP高温脂 170Kg/件 20091009 15 2.55入库表
RKID 入库日期 单据号 经办人 入库方式 供货单位 产品名称 包装规格 产品批号 件数 总重量(吨)
RK-20091110-100 2009-11-10 21141 aa 生产 新酸碱 钢丝绳表面脂 170Kg/件 20091110 5 0.85
RK-20091114-100 2009-11-14 41414 bb 生产 十五号 10号航空液压油 20Kg/件 20091114 128 2盘点表
盘点日期 产品名称 产品规格 产品批号 件数 上期末数量(吨) 仓库
2009-11-30 钢丝绳表面脂 170Kg/件 20091110 10 1.7 一区 问能否由这个三个表生成一种类似于下面结构的盘点单
产品名称,产品规格,产品批号,上期末的库存,生产收入,其它收入,公路销售,铁路销售,期末库存其中期末库存=上期末的库存+生产收入+其它收入-公路销售-铁路销售再把此次结算的期末库存写入到上面的3)盘点表里.