请教库存盘点表的SQL写法?

mis_1616 2007-06-26 09:01:55

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
...全文
1048 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mis_1616 2007-06-26
  • 打赏
  • 举报
回复
多谢大家帮助,结帖了
paoluo 2007-06-26
  • 打赏
  • 举报
回复
mis_1616() ( ) 信誉:100 Blog 加为好友 2007-06-26 09:20:05 得分: 0


我想把库存结余数小于等于0的记录不显示出来,这样是不是就没有1900-01-01的问题了


该怎样改正呢


----------------
Select
type As 材料类别,
mc As 材料名称,
gg As 材料规格,
dw As 材料单位,
dj As 材料单价,
SUM(Case status When '0' Then - sl Else sl End) As 结余数量,
dj * 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
Having SUM(Case status When '0' Then - sl Else sl End) > 0 --加上條件
hellowork 2007-06-26
  • 打赏
  • 举报
回复
我想把库存结余数小于等于0的记录不显示出来
----------------------------------------------------------------------------------
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
HAVING sum(case when status = '1' then sl else -sl end) > 0 /*加上此行*/
yrwx001 2007-06-26
  • 打赏
  • 举报
回复
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'

select 材料类别= type,材料名称=mc,材料规格 =gg,材料单位=dw,材料单价=dj, jy=sum(case status when 1 then sl else (-1)*sl end) ,
结余金额 = dj*sum(case status when 1 then sl else (-1)*sl end), 盘库日期 = getdate(),材料最后入库日期 = (select max(rq) from t_kc b where b.type =type and b.mc = mc and b.gg = gg and b.dw = dw and b.dj = dj)

from t_kc group by type,mc,gg,dw,dj

drop table t_kc
-------------------------------------------
材料类别 材料名称 材料规格 材料单位 材料单价 jy 结余金额 盘库日期 材料最后入库日期
-------------------- -------------------- -------------------- -------------------- --------------- ----------- -------------------------- ------------------------------------------------------ ------------------------------------------------------
消耗材料 焊? 埋弧焊 公斤 2.30 150 345.00 2007-06-26 09:14:52.963 2007-06-04 00:00:00.000
消耗材料 焊? 埋弧焊 公斤 2.40 50 120.00 2007-06-26 09:14:52.963 2007-06-04 00:00:00.000

bill024 2007-06-26
  • 打赏
  • 举报
回复
select type,mc,gg,dw,dj,结余数量=sum(case when status='0' then sl else 0 end),
结余金额=sum(case when status='1' then dj*sl
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
mis_1616 2007-06-26
  • 打赏
  • 举报
回复
我想把库存结余数小于等于0的记录不显示出来,这样是不是就没有1900-01-01的问题了


该怎样改正呢
paoluo 2007-06-26
  • 打赏
  • 举报
回复
那個結果不用看,不止那一處錯誤,能明白意思就可以了。
bill024 2007-06-26
  • 打赏
  • 举报
回复
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.30 50 115.00 2007-06-26 2007-06-02
消耗材料 焊药 埋弧焊 公斤 2.40 50 120.00 2007-06-26 2007-06-02
mis_1616 2007-06-26
  • 打赏
  • 举报
回复
buxiangwei
--------------------------------------
是的,那个数据有错误,是我算错了
hellowork 2007-06-26
  • 打赏
  • 举报
回复
消耗材料 焊药 埋弧焊 公斤 2.3 50 115
--------------------------------------------------------------------------------
楼主提供的这个结果有误,单价为2.3的结余数量应该是150,结存金额为345.
buxiangwei 2007-06-26
  • 打赏
  • 举报
回复
up
hellowork 2007-06-26
  • 打赏
  • 举报
回复
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
paoluo 2007-06-26
  • 打赏
  • 举报
回复
或者

Select
type As 材料类别,
mc As 材料名称,
gg As 材料规格,
dw As 材料单位,
dj As 材料单价,
SUM(Case status When '0' Then - sl Else sl End) As 结余数量,
dj * 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
paoluo 2007-06-26
  • 打赏
  • 举报
回复
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

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧