求一Select语句,望大家帮忙
select语句不知怎写,请大家帮忙
table :仓库凭证
field :仓库 int,凭证号 char ,物品 int,进出 bit, 数量 num,金额 num
Table :库存
Field :仓库 int,物品 int,数量 num,金额 num
求得出结果:
Sum(仓库凭证.数量) as 进仓数量 Where 进出 = 1
Sum(仓库凭证.金额) as 进仓金额 Where 进出 = 1
Sum(仓库凭证.数量) as 出仓数量 Where 进出 = 0
Sum(仓库凭证.金额) as 出仓金额 Where 进出 = 0
库存.数量 as 期末数量
库存.金额 as 期末金额
期末数量 - 进仓数量 + 出仓数量 as 期初数量
期末金额 - 进仓金额 + 出仓金额 as 期初金额
------解决方案-------------------- select
A.仓库,
A.物品,
isnull(B.数量,0)-isnull(A.进仓数量,0)+isnull(A.出仓数量,0) AS 期初数量,
isnull(B.金额,0)-isnull(A.进仓金额,0)+isnull(A.出仓金额,0) AS 期初金额,
A.进仓数量,
A.进仓金额,
A.出仓数量,
A.出仓金额,
B.数量 as 期末数量,
B.金额 as 期末金额
from (
select
仓库,
物品,
sum(case when 进出=1 then 数量 else 0 end ) as 进仓数量,
sum(case when 进出=1 then 金额 else 0 end ) as 进仓金额,
sum(case when 进出=0 then 数量 else 0 end ) as 出仓数量,
sum(case when 进出=0 then 金额 else 0 end ) as 出仓金额
from 仓库凭证
group by 仓库,物品) AS A
inner join 库存 AS B on A.仓库=B.仓库 and A.物品=B.物品
------解决方案--------------------来一个例子:
declare @仓库凭证 table(仓库 int,凭证号 char(3) ,物品 varchar(5),进出 bit, 数量 int,金额 decimal(9,3))
insert into @仓库凭证
select '1 ', '001 ', 'B ',1,100,1000 union all
select '1 ', '002 ', 'B ',0,40,400 union all
select '1 ', '003 ', 'B ',1,50,500
declare @库存 table (仓库 int,物品 varchar(5),数量 int,金额 decimal(9,3))
insert into @库存
select '1 ', 'B ',110,1100
select tmp.仓库,tmp.物品,tmp.凭证号,
[库初数量]
=case when b.数量 <tmp.StocksSum+tmp.数量 then b.数量-tmp.StocksSum else tmp.数量 end
from
(select *,StocksSum=
isnull((select sum(case when [进出]=1 then [数量] else -[数量] end)
from @仓库凭证 where 仓库=a.仓库 and 物品=a.物品 and [凭证号]> a.[凭证号]),0),
StocksPrice=
isnull((select sum(case when [进出]=1 then [金额] else -[金额] end)
from @仓库凭证 where 仓库=a.仓库 and 物品=a.物品 and [凭证号]> a.[凭证号]),0)
from @仓库凭证 as a )tmp
right join @库存 b on tmp.仓库=b.仓库 and tmp.物品=b.物品
and b.数量 ! <tmp.StocksSum+tmp.数量
(3 行受影响)
(1 行受影响)
仓库 物品 凭证号 库初数量
----------- ----- ---- -----------
1 B 001 100
1 B 002 40
1 B 003 50
(3 行受影响)