mysql - MySQL 中具有可变数量动态列的数据透视表(组键 = id 字段的值行)

标签 mysql dynamic pivot

虽然有很多关于数据透视表的问题,但它们似乎都没有解决我需要做的事情,或者看起来太复杂,我无法开始工作。

我有一个应用程序,可以通过无线网络从远程信息处理设备收集数据(例如,运行各种嵌入式数据收集应用程序的 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/

相关文章:

mysql - 我如何查询mysql中字段不为空或null的所有记录?

php - SQLSTATE[42S22] : Column not found: 1054 Unknown column '0' in 'where clause'

C#:从泛型调用外部程序集中的重载方法

c - 动态数组分配困惑

mysql - 多列交叉制表又名枢轴

mysql - SSIS - 将数据从 SQL Server move 到 MySQL

java - Netbeans:包 com.mysql 不存在

python - 在 Django 中使用交互式控件制作 Bokeh 图

sql-server - SQL转置数据

sql-server - 使用 PIVOT 将日期转换为 MTD、QTD、YTD