1

同じ ID を持つ行を「平坦化」できるクエリを探しています。

  • 2 番目の列の値は、新しいテーブルの列名として使用されます
  • 3 番目の列の値によって、新しいテーブルの値が決まります。

例として:

テーブルはこんな感じ。

ID       year     event
------------------------
Guid1    2005     A
Guid1    2010     B
Guid2    2020     C

私はそれが次のようになりたい..

ID       2005      2010     2020
Guid1    A         B        
Guid2                       C

これを行う方法についてのアイデアはありますか?

4

1 に答える 1

0

(id, year) の組み合わせはユニークだと思いますか? そうしないと、期待する出力がわかりません。一意の場合、次のようになります。

SELECT
  id,
  MIN(IF(year = 2005, event, NULL)) AS '2005',
  MIN(IF(year = 2010, event, NULL)) AS '2010',
  MIN(IF(year = 2020, event, NULL)) AS '2020'
FROM
  t
GROUP BY
  id

MIN(IF(...))上記は、希望する年ごとにステートメントを 1 回繰り返す必要があることを意味します。SQL でこれを自動的に行う方法はありません。SQL はデータとメタデータを混合しません。クエリで列を動的に指定することはできません。「*」を使用するか、正確な列を指定します。

于 2012-08-16T12:39:45.350 に答える