2016-02-07 28 views
7

Mam tabeli tak na mySQL DB:Czy można wykonać takie zapytanie?

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 

i tak dalej. nie wiem, czy mogę założyć zapytanie takiego, ale to, co chciałbym dostać to wynik następująco:

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 

czyli jeśli proces jest obecny lub nie w tym wydaniu olimpiada.

+1

należy do [tabeli przestawnej] (http://www.artfulsoftware.com/infotree/qrytip.php?id=78) problemu. – 1000111

+2

Spójrz na to [post] (http://stackoverflow.com/questions/7674786/mysql-pivot-table). Następnie spróbuj najpierw. – 1000111

Odpowiedz

3

Tak można użyć takim wypadku,

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, ale to dziwne, ponieważ dostaję "tak" tylko na pierwszym (Londyn 2012), a inne "nie", nawet jeśli muszę uzyskać "tak". Wygląda na to, że działa tylko w przypadku pierwszego przypadku: – Idro

3

Można zbudować kwerendę z wewnętrznym wybierz. Wewnętrzny wybór przygotowuje dane, dodając kolumny. Zewnętrzne wybierz grupy danych:

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 

Trzeba zastąpić YourTableName z nazwą tabeli.

+0

yes @Henik, thanks. ale poprawione. – datelligence

+1

WSPANIAŁE !!! Zgadza się, dziękuję. – Idro