我有一个这样的表格,如下:
物料 仓库 数量
101 A 200
101 C 100
102 A 502
102 B 200
102 C 100
103 C 200
104 A 100
我想通过查询变成如下格式:
物料 仓库A数量 仓库B数量 仓库C数量
101 200 0 100
102 502 200 100
103 0 0 200
104 100 0 0
请问我这个查询应该怎样写?
我试过下面这样写,
select a.物料,a.库存 as 仓库A数量,b.仓库B数量,c.仓库c数量 from 表,
(select 物料,仓库 as 仓库B数量 from 表 where 仓库= 'b ') b,
(select 物料,仓库 as 仓库B数量 from 表 where 仓库= 'c ') c
where a.仓库= 'a ' and a.物料=b.物料 and a.物料=c.物料
这样写后就漏掉如只有一个仓库有库存,或只有两个仓库有库存的。只能查询出三个仓库都有库存的。
有没有办法把三个仓库的物料,只要有一个仓库有库存,都显示出来。?
------解决方案--------------------
create table 表(物料 int,仓库 char(1),数量 int)
insert into 表
select 101, 'A ',200
union all select 101, 'C ',100
union all select 102, 'A ',502
union all select 102, 'B ',200
union all select 102, 'C ',100
union all select 103, 'C ',200
union all select 104, 'A ',100
select 物料,
仓库A数量 = sum(case when 仓库 = 'A ' then 数量 else 0 end),
仓库B数量 = sum(case when 仓库 = 'B ' then 数量 else 0 end),
仓库C数量 = sum(case when 仓库 = 'C ' then 数量 else 0 end)
from 表
group by 物料
/*
物料 仓库A数量 仓库B数量 仓库C数量
----------- ----------- ----------- -----------
101 200 0 100
102 502 200 100
103 0 0 200
104 100 0 0
(所影响的行数为 4 行)
*/
------解决方案--------------------