日期:2014-05-18  浏览次数:20571 次

实在想不出来了,求一sql语句
a入库表
名称           入库数量
文件夹       100
笔 100
纸 200

b出库表
名称           出库数量
文件夹       50
笔 100

想得到如下结果
库存信息
名称           入库数量     出库数量   库存数量
文件夹       100               50               50
笔 100               100             0
纸 200               0                 200

或者如下结果
名称           库存数量
文件夹       50
笔 0
纸 200

请高人指点!谢谢先



------解决方案--------------------
select a.名称,入库数量,isnull(出库数量,0) as 出库数量,
库存数量=入库数量-isnull(出库数量,0)
from a
left join b
on a.名称=b.名称
------解决方案--------------------
select 名称,sum(入库数量) as 入库数量,sum(出库数量) as 出库数量,sum(库存数量) as 库存数量
from (
select 名称,入库数量,cast(0 as int) as 出库数量,入库数量 as 库存数量 from a入库表
union all
select 名称,0 as 入库数量,出库数量,-出库数量 as 库存数量 from b出库表
) as t
group by 名称


------解决方案--------------------
Select
A.名称,
A.入库数量,
IsNull(B.出库数量, 0) As 出库数量,
A.入库数量 - IsNull(B.出库数量, 0) As 库存数量
From
A
Left Join
B
On A.名称 = B.名称
------解决方案--------------------
create table 入库表(名称 varchar(20),入库数量 int)
insert into 入库表 select '文件夹 ',100
insert into 入库表 select '笔 ',100
insert into 入库表 select '纸 ',200

create table 出库表(名称 varchar(20),出库数量 int)
insert into 出库表 select '文件夹 ',50
insert into 出库表 select '笔 ',100
go

select
isnull(a.名称,b.名称) as 名称,
isnull(a.入库数量,0) as 入库数量,
isnull(b.出库数量,0) as 出库数量,
isnull(a.入库数量,0)-isnull(b.出库数量,0) as 库存数量
from
(select 名称,sum(入库数量) as 入库数量 from 入库表 group by 名称) a
full outer join
(select 名称,sum(出库数量) as 出库数量 from 出库表 group by 名称) b
on
a.名称=b.名称
go

/*
名称 入库数量 出库数量 库存数量
-------------------- ----------- ----------- -----------
笔 100 100 0
文件夹 100 50 50
纸 200 0 200
*/

drop table 入库表,出库表
go
------解决方案--------------------
--建立测试环境
create table 入库表(名称 varchar(10),入库数量 int)
insert 入库表(名称,入库数量)
select '文件夹 ', '100 ' union all
select '笔 ', '100 ' union all
select '纸 ', '200 '
go
create table 出库表 (名称 varchar(10),出库数量 int)
insert 出库表 (名称,出库数量)
select '文件夹 ', '50 ' union all
select '笔 ', '100 '
go
--执行测试语句
select a.名称 as 名称,isnull(a.入库数量,0) as 入库数量
,isnull(b.出库数量,0) as 出库数量,isnull(a.入库数量,0)-isnull(b.出库数量,0) as 库存数量
from(select 名称,sum(入库数量) as 入库数量 from 入库表 group by 名称) a
full join(select 名称,sum(出库数量) as 出库数量 from 出库表 group by 名称) b on a.名称=b.名称
go

go
--删除测试环境
drop table 入库表,出库表
go
/*--测试结果
名称 入库数量 出库数量 库存数量
---------- ----------- ----------- -----------