如何并排显示同一个表中的数据

时间:2013-12-04 17:13:22

标签: php mysql sql database inner-join

假设我在mysql中有一个表(称为get),如下所示:

ID S Num
00 1 506
00 2 620
01 1 562
01 2 564
02 1 548
02 2 484
03 1 488
03 2 895

我试图以这种格式得到它:

ID S1  S2
00 506 620
01 562 564
02 548 484
03 488 895

到目前为止,我有这个,但它给了我一个错误:

select id,d.S1,c.S2 from 
(select S as S1 from get where S=1)d inner join  
(select s as S2 from get where S=2)c using (id);

我仍然不太确定加入,但这似乎有道理。

编辑:S有时只能有1个值,在这些时间内,此值将为S1

2 个答案:

答案 0 :(得分:7)

您可以使用自我加入,换句话说,您可以在桌面上加入两次,类似于您的开始方式。由于您声明S=1将始终存在,因此您可以使用以下查询:

select t1.id,
  t1.num S1,
  t2.num S2
from yourtable t1
left join yourtable t2
  on t1.id = t2.id
  and t2.s = 2
where t1.s = 1;

SQL Fiddle with Demo。即使表中不存在S=1,在表上使用LEFT JOIN也会返回值为S=2的所有行。

您还可以使用带有CASE表达式的聚合函数来获得结果:

select
  id,
  sum(case when s = 1 then num end) S1,
  sum(case when s = 2 then num end) S2
from yourtable
group by id;

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

虽然JOIN可能不是最佳方式,但您可以通过

获得所需的结果
SELECT t1.id, t.Num [S1], t2.Num [S2]
FROM Table t1
LEFT JOIN Table t2 ON t1.id = t2.id AND t1.s <> t2.s

如果表格的S列中可能还有其他值,请参阅PIVOT

编辑:在看到可能存在没有S = 2的ID的评论后,将INNER JOIN更改为LEFT JOIN