1

MySQLデータベースがあり、テーブルが垂直方向にデータを保存するために設定されています。

Userid -- Field -- Data
186       30       New York
186       31       Phone
186       32       Delta

187       30       Los Angeles
187       31       Website
187       32       US Air

列が既に水平になっている場合は列を選択できますが、出力を整理して次のようにします。

Userid -- Data30   --   Data31 -- Data32
186       New York      Phone     Delta
187       Los Angeles   Website   US Air

「この列に表示するには DATA30 を選択しますが、FIELD が 30 に等しい場合にのみ」と言うにはどうすればよいですか?

4

2 に答える 2

1

これは古典的なピボットテーブルです。MAX()集計とGROUP BYを使用CASEして、行を列に変換できます。Fieldこれは、の値が制限され、明確に定義されている場合にのみ正しく機能します。

MAX集計の目的は、NULL値ごとに削除することだけです。したがってUserid、値の1つだけがnull以外の場合、1行あたり3行ではなく、1行にまとめられます。

SELECT
  Userid,
  MAX(CASE WHEN Field = 30 THEN Data ELSE NULL END) AS Data30,
  MAX(CASE WHEN Field = 31 THEN Data ELSE NULL END) AS Data31,
  MAX(CASE WHEN Field = 32 THEN Data ELSE NULL END) AS Data32
FROM yourtable
GROUP BY Userid
于 2012-07-02T16:42:48.437 に答える
0

これを試して:

select Userid, 
if(Field=30,Data,null),
if(Field=31,Data,null),
if(Field=32,Data,null) 
from table1
group by Userid;
于 2012-07-02T16:47:30.167 に答える