2016-02-07 13 views
7

Ho una tabella come questo su DB MySQL:È possibile fare una query come questa?

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 

e così via. Non so se ho potuto impostare una query come questa, ma quello che vorrei ottenere è un risultato come segue:

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 

che è se il processo è presente o non per quella edizione Olimpiadi.

+1

appartiene a [pivot table] (http://www.artfulsoftware.com/infotree/qrytip.php?id=78) problema. – 1000111

+2

Dai un'occhiata a questo [post] (http://stackoverflow.com/questions/7674786/mysql-pivot-table). Quindi prova prima te stesso. – 1000111

risposta

3

Sì, è possibile, utilizzare il caso come questo,

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

Ok, ma è strano perché ottengo "sì" solo al primo (Londra 2012) e agli altri "no", anche se devo ottenere "sì". Sembra che funzioni solo per il primo caso – Idro

3

si può costruire una query di selezione con una interna. La selezione interna prepara i dati aggiungendo le colonne. I gruppi selezionati esterni i dati:

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 

si deve sostituire YourTableName con il nome della tabella.

+0

sì @Henik, grazie. ancora corretto. – datelligence

+1

GRANDE !!! È corretto, grazie. – Idro

Problemi correlati