2016-02-07 6 views
7

私は、MySQL DB上でこのようなテーブルを持っている:このようなクエリを作成できますか?

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

はい、あなたは、あなたが内側のSELECTでのクエリを構築することができ、

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

はい@ヘニック、ありがとう。まだ修正されています。 – datelligence

+1

大変!そうだね、ありがとう。 – Idro

関連する問題