2016-02-07 38 views
7

我对MySQL数据库这样的表:是否有可能做出这样的查询?

Olimpiade  Sport  Disciplina Categoria 
--------------------------------------------------- 
London 2012 Athletics 100m   men 
London 2012 Athletics 100m   woman 
Beijing 2008 Athletics 200m   men 
Beijing 2008 Athletics 200m   women 
Athens 2004 Athletics 800m   men 
Athens 2004 Athletics 800m   women 

等。 我不知道我是否可以建立这样的查询,但我想获得的结果如下:

Disciplina Categoria London 2012 Beijing 2008 Athens 2004 
------------------------------------------------------------------ 
100m   men   yes   no    yes 
100m   women  yes   yes   no 
200m   men   yes   no    yes 
200m   women  yes   yes   no 
800m   men   yes   yes   yes 
800m   women  yes   yes   yes 

即如果试验存在或不存在对于奥运版。

+1

属于[数据透视表](http://www.artfulsoftware.com/infotree/qrytip.php?id=78)的问题。 – 1000111

+2

看看这个[post](http://stackoverflow.com/questions/7674786/mysql-pivot-table)。然后先尝试一下自己。 – 1000111

回答

3

是的,你可以使用CASE这样,

Select Disciplina, Categoria, 
CASE when Olimpiade = 'London 2012' then 'yes' else 'no' end as 'London 2012', 
CASE when Olimpiade = 'Beijing 2008' then 'yes' else 'no' end as 'Biejing 2008', 
CASE when Olimpiade = 'Athens 2004' then 'yes' else 'no' end as 'Athens 2004' from tableName group by Disciplina, Categoria order by Disciplina, Categoria 
+1

好的,但这很奇怪,因为我只在第一次(伦敦2012)和其他人的'不',即使必须得到'是'才得到'是'。它似乎只适用于第一种情况 – Idro

3

就可以构建一个内部的选择查询。内部选择通过添加列来准备数据。外选择组数据:

SELECT 
    Disciplina, 
    Categoria, 
    IF (MAX(`London 2012`) > 0, 'yes', 'no') AS 'London 2012', 
    IF (MAX(`Beijing 2008`) > 0, 'yes', 'no') AS 'Beijing 2008', 
    IF (MAX(`Athens 2004`) > 0, 'yes', 'no') AS 'Athens 2004' 
FROM 
    (
     SELECT 
      Disciplina, 
      Categoria, 
      IF (Olimpiade = 'London 2012', 1, 0) AS 'London 2012', 
      IF (Olimpiade = 'Beijing 2008', 1, 0) AS 'Beijing 2008', 
      IF (Olimpiade = 'Athens 2004', 1, 0) AS 'Athens 2004' 
     FROM YourTableName 
    ) AS Games 
GROUP BY Disciplina, Categoria 
ORDER BY Disciplina, Categoria 

你必须与你的表的名称,以取代YourTableName

+0

是@Henik,谢谢。但尚未纠正。 – datelligence

+1

很棒!这是正确的,谢谢。 – Idro