create table stock
(
id int identity(1,1),
type varchar(20),--材料类别
name varchar(20),--材料名称
xh varchar(20),--材料型号
c int ,--长度
k int ,--宽度
h int ,--厚度
gg varchar(20),--材料规格
dw varchar(20),--计量单位
dwzl int, --单位重量(针对于型材而言)
dj int, --材料单价
sl int, --出入库数量
rq datetime ,--日期
flags char(1),--出入库标志(1为入库,0为出库)
bh varchar(20),--票据编号
yt varchar(20),--材料用途
dept_name varchar(20)--领料部门
)
/*板材入库数据*/
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',0,3000,10,'2006-1-1','1','1-1',null,null
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',0,3500,8,'2006-1-1','1','1-2',null,null
insert into stock select '板材','钢板',null,6,2,8,'6*2*8','吨',0,3000,15,'2006-1-1','1','1-3',null,null
insert into stock select '板材','冷轧板',null,10,3,12,'10*3*12','吨',0,4000,20,'2006-1-1','1','1-4',null,null
/*型材入库数据*/
insert into stock select '型材','槽钢','16#',10,null,null,'16#*10','吨',0.03,3000,10,'2006-1-1','1','1-5',null,null
insert into stock select '型材','槽钢','12#',10,null,null,'12#*10','吨',0.02,3000,10,'2006-1-1','1','1-6',null,null
/*标准件入库数据*/
insert into stock select '标准件','aaa',null,null,null,null,'a1','片',0,100,10,'2006-1-1','1','1-7',null,null
insert into stock select '标准件','bbb',null,null,null,null,'b1','片',0,200,20,'2006-1-1','1','1-8',null,null
/*板材出库数据*/
insert into stock select '板材','钢板',null,2,2,5,'2*2*5','吨',0,3000,1,'2006-1-2','0','0-1','大梁横板','生产车间'
insert into stock select '板材','钢板',null,3,2,5,'3*2*5','吨',0,3500,1,'2006-1-2','0','0-2','大梁横板','生产车间'
/*型材出库数据*/
insert into stock select '型材','槽钢','16#',4,null,null,'16#*4','吨',0.03,3000,1,'2006-1-2','0','0-3','左箱板','生产车间'
insert into stock select '型材','槽钢','12#',8,null,null,'12#*8','吨',0.03,3000,1,'2006-1-2','0','0-4','右箱板','生产车间'
/*标准件出库数据*/
insert into stock select '标准件','aaa',null,null,null,null,'a1','片',0,100,4,'2006-1-2','0','0-5','前轮','生产车间'
insert into stock select '标准件','bbb',null,null,null,null,'b1','片',0,200,3,'2006-1-2','0','0-6','后轮','生产车间'drop table stock/*
要求按类别,名称,型号,规格,单价,日期得到库存材料的出入库明细帐
明细账说明:对于板材而言
规格=c * k * h
1.入库总重量=(板材入库时的长度 * 宽度 * 厚度/1000) * 7.85 * 入库数量
2.入库金额=dj * 入库总重量
3.出库总重量=(板材出库时的长度 * 宽度 * 厚度/1000) * 7.85 * 出库数量
4.出库金额=dj * 出库总重量
5.板材的结余数量=同类别,同名称,同价格的板材的入库数量-出库数量
6.结余板材的长度等于同类别,同名称,同价格的板材的入库长度-出库长度
宽度等于同类别,同名称,同价格的板材的入库宽度-出库宽度
厚度等于同类别,同名称,同价格的板材的入库厚度-出库厚度
结余重量=(结余长度 * 结余宽度 * 结余厚度/1000) * 7.85 * 结余数量
结余金额=dj * 结余重量对于型材而言
规格=xh * c
入库总重量=dwzl * 入库长度 * 入库数量
入库金额=dj * 入库总重量
出库总重量=dwzl * 出库长度 * 出库数量
出库金额=出库总重量 * 出库数量
结余长度=入库长度 - 出库长度
结余总重量=结余长度 * 结余数量
结余金额=dj * 结余总重量对于标准件而言
结余数量=入库数量-出库数量
结余金额=dj * 结余数量
*/
/*
类别 名称 型号 入库规格 单位 单价 入库数量 入库总重量 入库金额 出库规格 出库数量 出库总重量 出库金额 结余规格 结余数量 结余重量 结余金额 日期 票据编号 材料用途 领料部门
板材 钢板 null 6*2*5 吨 3000 10 4.71 14130 null 0 0 0 null null 4.71 14130 2006-1-1 1-1 null null
板材 钢板 null 6*2*5 吨 3500 8 3.768 13188 null 0 0 0 null null 3.768 13188 2006-1-1 1-2 null null
板材 钢板 null 6*2*8 吨 3000 15 11.304 33912 null 0 0 0 null null 11.304 33912 2006-1-1 1-3 null null
板材 冷轧板 null 10*3*12 吨 4000 20 56.52 226080 null 0 0 0 null null 56.52 226080 2006-1-1 1-4 null null
型材 槽钢 16# 16#*10 吨 3000 10 3 9000 null 0 0 0 null null 3 9000 2006-1-1 1-5 null null
型材 槽钢 12# 12#*10 吨 3000 10 2 6000 null 0 0 0 null null 2 6000 2006-1-1 1-6 null null
标准件 aaa a1 a1 片 100 10 0 1000 null 0 0 0 a1 10 0 1000 2006-1-1 1-7 null null
标准件 bbb b1 b1 片 200 20 0 4000 null 0 0 0 b1 20 0 4000 2006-1-1 1-8 null null板材 钢板 null null 吨 3000 0 0 0 2*2*5 1 0.157 471 null 0 4.533 13599 2006-1-2 0-1 大梁横板 生产车间
板材 钢板 null null 吨 3500 0 0 0 3*2*5 1 0.2355 824.25 null 0 3.5325 12363.75 2006-1-2 0-2 大梁横板 生产车间
型材 槽钢 16# null 吨 3000 0 0 0 16#*4 1 0.12 360 null 0 2.88 8640 2006-1-2 0-3 左箱板 生产车间
型材 槽钢 12# null 吨 3000 0 0 0 12#*8 1 0.16 480 null 0 1.84 5520 2006-1-2 0-4 右箱板 生产车间
标准件 aaa null null 片 100 0 0 0 a1 4 0 400 a1 6 0 600 2006-1-2 0-5 前轮 生产车间
标准件 bbb null null 片 200 0 0 0 b1 3 0 600 b1 17 0 3400 2006-1-2 0-6 后轮 生产车间
*/--需要注意的是:以上数据只是单纯的一笔出入库数据,在以后多笔出入库发生以后,再统计报表的时候,结余规格,结余数量和结余重量,要把前一次的出入库数据考虑进去。
--能够按照类别,名称和时间段进行查询
2. 库存表没有分开,出入库数据使用标志位(1,0)进行区分
3. 是啊,就是使用存储过程实现多谢了!
2. 这个是明细表出来的规则是怎么样的? 每条 stock 的记录在明细表中都对应有一条记录?最后, 建议楼主把与产生统计结果没有什么关系的列去掉, 然后根据精简后的表列一个数据做统计说明.
这样大家更容易看懂你的需求(毕竟没有太多人会愿意去花费很多时间详细理解你的业务需求)
go
create table stock
(
id int identity(1,1),
type varchar(20),--材料类别
name varchar(20),--材料名称
xh varchar(20),--材料型号
c int ,--长度
k int ,--宽度
h int ,--厚度
gg varchar(20),--材料规格
dw varchar(20),--计量单位
dj int, --材料单价
sl int, --出入库数量
rq datetime ,--日期
flags char(1) --出入库标志(1为入库,0为出库)
)
go
/*板材入库数据*/
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',3000,10,'2006-1-1','1'
insert into stock select '板材','钢板',null,6,2,5,'6*2*5','吨',3500,8,'2006-1-1','1'
insert into stock select '板材','钢板',null,6,2,8,'6*2*8','吨',3000,15,'2006-1-1','1'
insert into stock select '板材','冷轧板',null,10,3,12,'10*3*12','吨',4000,20,'2006-1-1','1'
/*型材入库数据*/
insert into stock select '型材','槽钢','16#',10,null,null,'16#*10','吨',3000,10,'2006-1-1','1'
insert into stock select '型材','槽钢','12#',10,null,null,'12#*10','吨',3000,10,'2006-1-1','1'
/*板材出库数据*/
insert into stock select '板材','钢板',null,2,2,5,'2*2*5','吨',3000,1,'2006-1-2','0'
insert into stock select '板材','钢板',null,3,2,5,'3*2*5','吨',3500,1,'2006-1-2','0'
/*型材出库数据*/
insert into stock select '型材','槽钢','16#',4,null,null,'16#*10','吨',3000,1,'2006-1-2','0'
insert into stock select '型材','槽钢','12#',8,null,null,'12#*8','吨',3000,1,'2006-1-2','0'
go
---------------------------------------------------------------------------------------------
/*要求按类别,名称,型号,单价,日期得到库存的结余数
--如果是2006-1-1这一天
type name xh c k h gg dw dj sl rq
---- ---- ---- --- ----- ----- ----- --- ----- ---------
板材 钢板 NULL 6 2 5 6*2*5 吨 3000 10 2006-1-1
板材 钢板 NULL 6 2 5 6*2*5 吨 3500 8 2006-1-1
板材 钢板 NULL 6 2 8 6*2*8 吨 3000 15 2006-1-1
板材冷轧板 null 10 3 12 10*3*12 吨 4000 20 2006-1-1型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 10 2006-1-1
型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 10 2006-1-1
*/
/*
--如果是2006-1-2这一天
type name xh c k h gg dw dj sl rq
---- ---- ---- --- ----- ----- ----- --- ----- -----------
板材 钢板 NULL 6 2 5 6*2*5 吨 3000 9 2006-1-2
板材 钢板 NULL 4 2 5 4*2*5 吨 3000 1 2006-1-2
板材 钢板 NULL 6 2 5 6*2*5 吨 3500 7 2006-1-2
板材 钢板 NULL 3 2 5 3*2*5 吨 3500 1 2006-1-2
板材冷轧板 null 10 3 12 10*3*12 吨 4000 20 2006-1-2型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 9 2006-1-2
型材 槽钢 16# 6 NULL NULL 16#*6 吨 3000 1 2006-1-2
型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 9 2006-1-2
型材 槽钢 12# 2 NULL NULL 12#*2 吨 3000 1 2006-1-2
*/
------------------------------------------------------------------------------------------
drop table stock
/**********************************************************************/
以下是 dulei115()网友提供的解决方案,我想改动一下,但是总出错.select a.type, a.[name], a.xh, case c.id when 1 then a.c when 2 then (a.sl - b.sl) % a.c end as c,
a.k, a.h, replace(ltrim(rtrim(isnull(a.xh, '') + ' '
+ isnull(cast(case c.id when 1 then a.c when 2 then (a.sl - b.sl) % a.c end as varchar), '')
+ ' ' + isnull(cast(a.k as varchar), '') + ' ' + isnull(cast(a.h as varchar), ''))), ' ', '*') as gg, --gg最好用一个函数来生成
a.dw, a.dj, case c.id when 1 then (a.sl - b.sl) / a.c when 2 then 1 end as sl
from (select type, [name], xh, c, k, h, gg, dw, dj, sum(c * sl) as sl
from stock
where flags = '1'
group by type, [name], xh, c, k, h, gg, dw, dj) a
join (select type, [name], xh, k, h, dw, dj, sum(c * sl) as sl
from stock
where flags = '0'
group by type, [name], xh, k, h, dw, dj) b
on a.type = b.type and a.[name] = b.[name] and isnull(a.xh, '') = isnull(b.xh, '') and isnull(a.k, -1) = isnull(b.k, -1)
and isnull(a.h, -1) = isnull(b.h, -1) and a.dw = b.dw and a.dj = b.dj
cross join (select 1 as id union select 2) c
where c.id <> 2 or (a.sl - b.sl) % a.c <> 0
order by a.type, a.[name], a.xh desc, a.k, a.h, a.dw, a.dj, c.id
要按照日期查询得出库存结余数*要求按类别,名称,型号,单价,日期得到库存的结余数
--如果是2006-1-1这一天
type name xh c k h gg dw dj sl rq
---- ---- ---- --- ----- ----- ----- --- ----- ---------
板材 钢板 NULL 6 2 5 6*2*5 吨 3000 10 2006-1-1
板材 钢板 NULL 6 2 5 6*2*5 吨 3500 8 2006-1-1
板材 钢板 NULL 6 2 8 6*2*8 吨 3000 15 2006-1-1
板材冷轧板 null 10 3 12 10*3*12 吨 4000 20 2006-1-1型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 10 2006-1-1
型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 10 2006-1-1
*/
/*
--如果是2006-1-2这一天
type name xh c k h gg dw dj sl rq
---- ---- ---- --- ----- ----- ----- --- ----- -----------
板材 钢板 NULL 6 2 5 6*2*5 吨 3000 9 2006-1-2
板材 钢板 NULL 4 2 5 4*2*5 吨 3000 1 2006-1-2
板材 钢板 NULL 6 2 5 6*2*5 吨 3500 7 2006-1-2
板材 钢板 NULL 3 2 5 3*2*5 吨 3500 1 2006-1-2
板材冷轧板 null 10 3 12 10*3*12 吨 4000 20 2006-1-2型材 槽钢 16# 10 NULL NULL 16#*10 吨 3000 9 2006-1-2
型材 槽钢 16# 6 NULL NULL 16#*6 吨 3000 1 2006-1-2
型材 槽钢 12# 10 NULL NULL 12#*10 吨 3000 9 2006-1-2
型材 槽钢 12# 2 NULL NULL 12#*2 吨 3000 1 20