0

MySQL にいくつかのテーブルがあります。

+---------+--------------+---------+    +---------+----------+
|             TABLE 1              |    |       TABLE 2      |
+---------+--------------+---------+    +---------+----------+
| id_user |  testnumber1 |   score |    | id_user | username |
+---------+--------------+---------+    +---------+----------+
|    1    |       1      |    90   |    |    1    |   aaa    |
|    1    |       2      |    80   |    |    2    |   bbb    |
|    1    |       3      |    70   |    |    3    |   ccc    |
|    2    |       1      |    60   |    +---------+----------+
|    2    |       2      |    66   |
|    2    |       3      |    77   |
|    3    |       1      |    90   |
|    3    |       2      |    80   |
|    3    |       3      |    70   |
+---------+--------------+---------+

これを取得することは可能ですか:

+---------+--------------+--------------+--------------+
|                      TABLE RESULT                    |
+---------+--------------+--------------+--------------+ 
| id_user |  testnumber1 |  testnumber2 |  testnumber3 |
+---------+--------------+--------------+--------------+
|    1    |      90      |      80      |      70      |
|    2    |      60      |      66      |      77      |
|    3    |      90      |      80      |      70      |
+---------+--------------+--------------+--------------+

?

この結果を得るには、どのステートメントを使用できますか?

4

1 に答える 1

2

必要なのはPIVOT、列を行にすることです。残念ながら、MySQL にはPIVOTテーブル演算子がありません。ただし、次のCASEように式を使用してこれを行うことができます。

SELECT
  id_user,
  MAX(CASE WHEN  testnumber1 = 1 THEN score END) AS testnumber1,
  MAX(CASE WHEN  testnumber1 = 2 THEN score END) AS testnumber2,
  MAX(CASE WHEN  testnumber1 = 3 THEN score END) AS testnumber3
FROM Table
GROUP BY id_user;

SQL フィドルのデモ

于 2012-11-29T10:32:18.630 に答える