分组求和,行转列

求存储过程,或者SQL语句。谢谢大家!
单据日期,单据类型,库房名称,货品名称,重量
XML code
djrq djlx kfmc hpmc zl 2010-03-20 初始库存 半成品 玉米 11 2010-03-20 初始库存 半成品 豆粕 22 2010-03-20 初始库存 半成品 鱼粉 33 2010-03-21 初始库存 原料 玉米 1 2010-03-21 初始库存 原料 豆粕 2 2010-03-22 原种入库 半成品 玉米 11 2010-03-22 原种入库 半成品 豆粕 22 2010-03-22 种子入库 半成品 猪预混料 6 2010-03-22 种子入库 半成品 蛋禽预混料 4 2010-03-22 种子出库 半成品 玉米 -1 2010-03-22 种子出库 半成品 种禽预混料 -2 2010-03-22 丸化后出库 半成品 鱼粉 -2 2010-03-25 初始库存 预混料 猪预混料 1 2010-03-25 原种入库 预混料 猪预混料 2 2010-03-25 原种入库 半成品 猪预混料 2 2010-03-26 丸化后入库 原料 玉米 1 2010-03-26 原种入库 销售仓库 玉米 11 2010-03-26 原种出库 销售仓库 豆粕 -2
SQL code
求:某个时间段内变化情况,需要报表如下:‘2010-03-20’——‘2010-03-26’ 库房名称 起始时间 入库 出库 结余数量 --------------------------------------------------------- 半成品 2010-03-20 sum(?) sum(?) sum(zl) 原料 2010-03-20 sum(?) sum(?) sum(zl) 预混料 2010-03-20 sum(?) sum(?) sum(zl) 销售仓库 2010-03-20 sum(?) sum(?) sum(zl) ... 合计 ? ? 解释:入库,出库都是求时间段开始时间至结束时间的和。结余是求截止时间的结余。例如上面就是求2010-03-26的结余。
SQL code
CREATE TABLE [kc1] ( [djrq] [smalldatetime] NULL , [djlx] [nvarchar] (20), [kfmc] [nvarchar] (50), [hpmc] [nvarchar] (50), [zl] [float] NULL ) GO insert into kc1 select '2010-03-20','初始库存','半成品','玉米','11' insert into kc1 select '2010-03-20','初始库存','半成品','豆粕','22' insert into kc1 select '2010-03-20','初始库存','半成品','鱼粉','33' insert into kc1 select '2010-03-21','初始库存','原料','玉米','1' insert into kc1 select '2010-03-21','初始库存','原料','豆粕','2' insert into kc1 select '2010-03-22','原种入库','半成品','玉米','11' insert into kc1 select '2010-03-22','原种入库','半成品','豆粕','22' insert into kc1 select '2010-03-22','种子入库','半成品','猪预混料','6' insert into kc1 select '2010-03-25','原种入库','预混料','猪预混料','2' insert into kc1 select '2010-03-26','原种出库','半成品','豆粕','-6' insert into kc1 select '2010-03-26','原种入库','销售仓库','玉米','11' insert into kc1 select '2010-03-26','种子出库','半成品','猪预混料','-1' insert into kc1 select '2010-03-26','原种入库','原料','豆粕','5' insert into kc1 select '2010-03-26','原种出库','原料','豆粕','-1' select [kfmc],min([djrq]), sum(case when djlx like '%入库%' then zl else 0 end) '入库', sum(case when djlx like '%出库%' then zl else 0 end) '出库', sum(zl) zl from kc1 where [djrq] between '2010-03-20' and '2010-03-26' group by [kfmc] kfmc 入库 出库 zl -------------------------------------------------- ----------------------- ---------------------- ---------------------- ---------------------- 半成品 2010-03-20 00:00:00 39 -7 98 销售仓库 2010-03-26 00:00:00 11 0 11 预混料 2010-03-25 00:00:00 2 0 2 原料 2010-03-21 00:00:00 5 -1 7 (4 行受影响)
 
select isnull([kfmc],'总计') [kfmc],min([djrq]), sum(case when djlx like '%入库%' then zl else 0 end) '入库', sum(case when djlx like '%出库%' then zl else 0 end) '出库', sum(zl) zl from kc1 where [djrq] between '2010-03-20' and '2010-03-26' group by [kfmc] with rollup kfmc 入库 出库 zl -------------------------------------------------- ----------------------- ---------------------- ---------------------- ---------------------- 半成品 2010-03-20 00:00:00 39 -7 98 销售仓库 2010-03-26 00:00:00 11 0 11 预混料 2010-03-25 00:00:00 2 0 2 原料 2010-03-21 00:00:00 5 -1 7 总计 2010-03-20 00:00:00 57 -8 118 (5 行受影响)
http://topic.csdn.net/u/20100329/21/1450a994-ba1c-475a-a73d-7371d5c25021.html?535654092
posted @ 2010-03-30 10:19  ghd2004  阅读(512)  评论(0编辑  收藏  举报