用于组合来自同一表的数据的SQL查询

时间:2015-09-24 16:51:07

标签: sql

我有这张桌子:

e.Parameter

我希望能够选择这样的东西:

create table mytable 
(ID varchar(10), VNDCOD INT, MANUF varchar(10), PRICE INT, COST INT);

insert into mytable values

 ('4', 1000, 'AG', 5455, 9384),
 ('4', 1000, 'A1', 16, 31),
 ('4', 2000, 'AG', 5253, 8339)

如果ID MANUF PRICE COST PRICE COST 4 AG 5455 9384 5253 8339 4 A1 16 31 有两个MANUF,我们应该将它们合并到IDPRICE的{​​{1}}和COST的一行上在左边,VNDCOD 1000在右边,就像我预期的结果一样。我不知道是否可以在一个查询中执行此操作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用自联接或MAX(CASE)(fiddle)

select t1.ID, t1.MANUF, t1.PRICE, t1.COST, t2.PRICE, t2.COST 
from mytable as t1 left join mytable as t2
  on t1.ID = t2.ID
 and t1.MANUF = t2.MANUF
 and t2.VNDCOD = 2000
where t1.VNDCOD = 1000
;

select ID, MANUF, 
   max(case when VNDCOD = 1000 then PRICE end), 
   max(case when VNDCOD = 1000 then COST end), 
   max(case when VNDCOD = 2000 then PRICE end), 
   max(case when VNDCOD = 2000 then COST end)
from mytable 
group by ID, MANUF

答案 1 :(得分:0)

您可以使用条件聚合轻松完成此操作:

select id,
       max(case when vndcode = 1000 then price end) as price_1000,
       max(case when vndcode = 1000 then cost end) as cost_1000,
       max(case when vndcode = 2000 then price end) as price_2000,
       max(case when vndcode = 2000 then cost end) as cost_2000
from mytable t
group by id;