当前位置: 代码迷 >> Sql Server >> 这个查询语句如何写
  详细解决方案

这个查询语句如何写

热度:88   发布时间:2016-04-27 15:34:25.0
这个查询语句怎么写?
我有一个这样的表格,如下:

物料             仓库             数量
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 行)
*/
------解决方案--------------------
  相关解决方案