- 爱易网页
-
MSSQL教程
- 请问库存盘点表的SQL写法
日期:2014-05-19 浏览次数:20546 次
请教库存盘点表的SQL写法?
create table t_kc --库存表
(
type varchar(20), --材料类别
mc varchar(20), --材料名称
gg varchar(20), --材料规格
dw varchar(20), --材料单位
dj decimal(13,2), --材料单价
sl int, --出入库数量
status char(1), --出入库标志 0为出库,1为入库
rq datetime --出入库日期
)
insert into t_kc select '消耗材料 ', '焊药 ', '埋弧焊 ', '公斤 ',2.3,100, '1 ', '2007-6-1 '
insert into t_kc select '消耗材料 ', '焊药 ', '埋弧焊 ', '公斤 ',2.3,100, '1 ', '2007-6-2 '
insert into t_kc select '消耗材料 ', '焊药 ', '埋弧焊 ', '公斤 ',2.4,100, '1 ', '2007-6-2 '
insert into t_kc select '消耗材料 ', '焊药 ', '埋弧焊 ', '公斤 ',2.3,30, '0 ', '2007-6-2 '
insert into t_kc select '消耗材料 ', '焊药 ', '埋弧焊 ', '公斤 ',2.3,20, '0 ', '2007-6-3 '
insert into t_kc select '消耗材料 ', '焊药 ', '埋弧焊 ', '公斤 ',2.4,50, '0 ', '2007-6-4 '
/*
要得到以下库存盘点表(按照材料类别,材料名称,材料规格,材料单位,材料单价进行分组统计 )
盘库日期为当天日期
材料最后入库日期为:相同类别,名称,规格,单位,单价的最后入库日期
材料类别 材料名称 材料规格 材料单位 材料单价 结余数量 结余金额 盘库日期 材料最后入库日期
消耗材料 焊药 埋弧焊 公斤 2.3 50 115 2007-6-26 2007-6-2
消耗材料 焊药 埋弧焊 公斤 2.4 50 120 2007-6-26 2007-6-2
*/
drop table t_kc
------解决方案--------------------
Select
*,
材料单价 * 结余数量 As 结余金额
From
(
Select
type As 材料类别,
mc As 材料名称,
gg As 材料规格,
dw As 材料单位,
dj As 材料单价,
SUM(Case status When '0 ' Then - sl Else sl End) As 结余数量,
GetDate() As 盘库日期,
Max(Case status When '0 ' Then '1900-01-01 ' Else rq End) As 材料最后入库日期
From
t_kc
Group By
type,
mc,
gg,
dw,
dj
) A
------解决方案--------------------
SELECT type as 材料类别,mc as 材料名称,gg as 材料规格,dw as 材料单位,
dj as 材料单价,
结余数量 = sum(case when status = '1 ' then sl else -sl end),
结余金额 = dj*sum(case when status = '1 ' then sl else -sl end),
盘库日期 = getdate(),
材料最后入库日期 = max(case when status = '1 ' then rq end)
FROM t_kc