读书人

请问库存盘点表的SQL写法

发布时间: 2012-01-05 22:36:54 作者: rapoo

请教库存盘点表的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
GROUP BY type,mc,gg,dw,dj


[解决办法]
select type,mc,gg,dw,dj,结余数量=sum(case when status= '0 ' then sl else 0 end),
结余金额=sum(case when status= '0 ' then dj*sl end),
盘库日期=convert(char(10),getdate(),120),材料最后入库日期=max(case when status= '1 ' then convert(char(10),rq,120) end)
from t_kc group by type,mc,gg,dw,dj

消耗材料焊药埋弧焊公斤2.3050115.002007-06-262007-06-02
消耗材料焊药埋弧焊公斤2.4050120.002007-06-262007-06-02

读书人网 >SQL Server

热点推荐