求个库存计算的sql

lu仙深 2018-06-16 10:03:56


求算出库存
谢谢
想不出好的办法写SQL
...全文
1481 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2018-06-20
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([合同号] nvarchar(22),[商品编号] nvarchar(22),[商品名称] nvarchar(21),[工厂] nvarchar(22),[数量] int,[进出] nvarchar(21))
Insert #T
select N'P1',N'G1',N'a',N'S1',100,N'进' union all
select N'P2',N'G2',N'b',N'S2',100,N'进' union all
select N'P1',N'G1',N'a',N'S1',50,N'出'
Go
--测试数据结束
SELECT 合同号,
商品编号,
商品名称,
工厂,
SUM( CASE
WHEN 进出 = '进' THEN
数量
ELSE
-数量
END
) 数量
,
SUM( CASE
WHEN 进出 = '进' THEN
0
ELSE
数量
END
) 已出
FROM #T
GROUP BY 合同号,
商品编号,
商品名称,
工厂;

shinger126 2018-06-20
  • 打赏
  • 举报
回复
引用 7 楼 weixin_42254420 的回复:
初学尝试回答一下。。 已出列写成 Sum(case when 进出 = '出' then 数量 end) as 已出
case when子句中,如果case已罗列了所有的情况,那么可以不用else,否则一定要加上else,否则有丢失数据的风险
紫枫昵 2018-06-20
  • 打赏
  • 举报
回复
select 合同号,商品编码,商品名称,工厂, sum(case when 进出=‘进’ then 数量 else 0 end )-sum(case when 进出=‘出’ then 数量 else 0 end ) from table group by 合同号,商品编码,商品名称,工厂
于佳祺Cyril 2018-06-19
  • 打赏
  • 举报
回复
初学尝试回答一下。。 已出列写成 Sum(case when 进出 = '出' then 数量 end) as 已出
RINK_1 2018-06-19
  • 打赏
  • 举报
回复

select 合同号,商品编码,商品名称,工厂,
SUM(case when 进出='进' then 数量 else -1*数量 end) as 数量,
SUM(case when 进出='出' then 数量 else 0 end) as 已出
from table
group by 合同号,商品编码,商品名称,工厂
lu仙深 2018-06-18
  • 打赏
  • 举报
回复


在加个列,求已出了多少,突然又不知道如何的写了
RINK_1 2018-06-18
  • 打赏
  • 举报
回复

select 合同号,商品编码,商品名称,工厂,
SUM(case when 进出='进' then 数量 else -1*数量 end) as 数量
from table
group by 合同号,商品编码,商品名称,工厂
早起晚睡 2018-06-18
  • 打赏
  • 举报
回复
只需要把进出转换下就OK了
oNiShiHuaiDan 2018-06-18
  • 打赏
  • 举报
回复
sum里还能 嵌套CASE? 我小白,好好学习。呵呵。
二月十六 版主 2018-06-17
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([合同号] nvarchar(22),[商品编号] nvarchar(22),[商品名称] nvarchar(21),[工厂] nvarchar(22),[数量] int,[进出] nvarchar(21))
Insert #T
select N'P1',N'G1',N'a',N'S1',100,N'进' union all
select N'P2',N'G2',N'b',N'S2',100,N'进' union all
select N'P1',N'G1',N'a',N'S1',50,N'出'
Go
--测试数据结束
SELECT 合同号,
商品编号,
商品名称,
工厂,
SUM( CASE
WHEN 进出 = '进' THEN
数量
ELSE
-数量
END
) 数量
FROM #T
GROUP BY 合同号,
商品编号,
商品名称,
工厂;


34,587

社区成员

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

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