【发布时间】:2017-10-26 18:31:54
【问题描述】:
这是我的桌子:
+----+-------+-----------+-------+
| id | Name | Parameter | Value |
+----+-------+-----------+-------+
| 1 | Andy | height | 1.85 |
| 2 | Igal | weight | 56 |
| 3 | Yossi | age | 28 |
| 4 | David | weight | |
| 5 | Igal | height | 1.9 |
| 6 | Andy | age | 25 |
+----+-------+-----------+-------+
这是我的查询:
SELECT
Name,
CASE WHEN (Paramter='age') THEN Value ELSE 0 END AS AGE,
CASE WHEN (Paramter='height') THEN Value ELSE 0 END AS HEIGHT,
CASE WHEN (Paramter='weight') THEN Value ELSE 0 END AS WEIGHT
FROM
table
结果:
+-------+-----+--------+--------+
| Name | AGE | HEIGHT | WEIGTH |
+-------+-----+--------+--------+
| Andy | 0 | 1.85 | 0 |
| Igal | 0 | 0 | 56 |
| Yossi | 28 | 0 | 0 |
| David | 0 | 0 | |
| Igal | 0 | 1.9 | 0 |
| Andy | 25 | 0 | 0 |
+-------+-----+--------+--------+
我也尝试按 [Name] 建立一个群组,但没有成功。
如何在一个行中显示每个人(姓名)的所有数据?
想要的餐桌:
+------+-----+--------+--------+
| Name | AGE | HEIGHT | WEIGTH |
+------+-----+--------+--------+
| Igal | 0 | 1.9 | 56 |
| Andy | 25 | 1.85 | 0 |
+------+-----+--------+--------+
【问题讨论】:
-
接受的答案和建议的重复项的其他高排名答案对于这个问题的要求来说太多了。
-
此操作称为旋转,并且已在 SO 上多次询问和回答。链接的重复主题中最受好评的答案为您提供了有关如何在 MySQL 中设计此类查询的分步说明。但是,请注意,与 MySQL 相比,在应用程序逻辑中执行此转换可能更有效。
-
你能做一个愿望结果的表格吗?
-
我用目标表更新了问题。谢谢。
-
UseGROUP_CONCAT` 和IF条件来做到这一点,就像在这个例子中:SELECTName, GROUP_CONCAT(IF(Parameter='age',Value,NULL) ) AS 年龄, GROUP_CONCAT(IF(Parameter='height',Value,NULL)) AS 身高, GROUP_CONCAT(IF(Parameter='weight',Value,NULL)) AS 体重 FROM @987654334 @ GROUP BYName//输出:姓名 年龄 身高 体重 安迪 25 1.85 NULL David NULL NULL Igal NULL 1.9 56 Yossi 28 NULL NULL`