sql菜菜子,100大元(100分)

  • 主题发起人 主题发起人 套牢1
  • 开始时间 开始时间

套牢1

Unregistered / Unconfirmed
GUEST, unregistred user!
一个表中存放商品入库和出库数据,如何得到所有商品的库存
要求:按商品代码汇总.
很简单的
如下:
交易编号 商品代码 交易数量 交易类型
2001 001 100 入库
2002 001 50 出库
2003 002 200 入库

如上所示,只要得到如下结果就可以
商品代码 库存数量
001 50
002 200
 
加入交易记录时把出库改为负数

select 商品代号,sum(交易数量) from <table> group by 商品代号
否则要用存储过程
 
select 商品代码,库存数量=sum(case 交易类型 when 入库 then 交日数量
else -交易数量 end)
from tbaname
group by 商品代码
 
select a。商品代码,库存总量=a。交易数量-b.交易数量
from (select 商品代码,交易数量 from tablename where 交易类型= 入库)as a,
(select 商品代码,交易数量 from tablename where 交易类型= 出库)as b
where a.商品代码=b。商品代码

如果不行 a left join b on a.商品代码=b。商品代码
 
SELECT 商品代码, SUM(交易数量*IIF(交易类型=入库, 1, -1)) AS 库存数量
FROM 商品
GROUP BY 商品代码
 
select distinct
商品代码,
(select sum(交易数量) from tablename where 商品代码=AAA.商品代码 and 交易类型='入库')-
(select sum(交易数量) from tablename where 商品代码=AAA.商品代码 and 交易类型='出库') as 库存数量
from tablename AAA
 
quicksilver的做法通用性较高。
在oracle中,可以使用decode和case实现,
在sql server中,可以使用case实现。
 
在access中可以用 iif实现
 

if exists (select * from sysobjects where id = object_id('dbo.www'))
drop table dbo.www
Go

create table www(
DocNo char(4) primary key, -- 交易编号
ItemNo char(3), -- 商品代码
Qty int, --交易数量
DocType char(4) --交易类型
)
Go

insert into www values('2001', '001',100,'入库')
insert into www values('2002', '001',50,'出库')
insert into www values('2003', '002',100,'入库')
insert into www values('2004', '001',20,'出库')
Go

select * from www
select ItemNo as 商品代码, Sum(case doctype when '入库' then Qty when '出库' then -Qty end) as 在库量 from www group by ItemNo

 
后退
顶部