虽然有很多关于数据透视表的问题,但它们似乎都没有解决我需要做的事情,或者看起来太复杂,我无法开始工作。
我有一个应用程序,可以通过无线网络从远程信息处理设备收集数据(例如,运行各种嵌入式数据收集应用程序的 GSM 调制解调器)。我的数据库将每组数据与“调制解调器 ID”相关联。收集的参数有很多(大约 100 个不同类型,因此为每个调制解调器创建一个包含 100 列的表似乎不太实际,特别是因为不同的调制解调器应用程序可能只使用可能的 100 个参数中的 10 个)。因此,我有一个非常简单的“参数”表,其中包含字段“modem_id”、“parm_id”和“值”——即经典的键=值表。
我想编写一个简单的 SQL 查询,它允许我搜索特定的调制解调器、对特定的 parm_id 进行排序,并使用限制和偏移量对结果进行分页。
表参数
中某些行的示例:
modem_id | parm_id | value
100 1 '11.1'
100 4 '22.2'
100 9 '3.33'
102 1 '12.3'
102 4 '23.4'
102 9 '3.45'
我想按 modem_id 将上述内容分组到一个临时表中,其中 parm_ids 位于单独的列中,例如:
modem_id | parm_id1 | parm_id4 | parm_id9
100 '11.1' '22.2' '3.33'
102 '12.3' '23.4' '3.45'
这看起来应该很简单,而且是一件很常见的事情,但我见过的唯一解决方案涉及数十行代码、准备好的语句和奇怪的转义序列,到处都有大量引号字符这让我什至无法理解查询应该做什么,以及我无法在这个示例中工作。
最佳答案
以下查询将为您提供所需的结果。
select modem_id,
IF(parm_id = 1, value, NULL) as parm_id1,
IF(parm_id = 2, value, NULL) as parm_id2,
......
IF(parm_id = 100, value, NULL) as parm_id100,
from table
希望有帮助。
关于mysql - MySQL 中具有可变数量动态列的数据透视表(组键 = id 字段的值行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569846/