选择具有相同列的所有行以分隔mysql中的列
我有一张这样的桌子:选择具有相同列的所有行以分隔mysql中的列,mysql,select,mariadb,pivot-table,group-concat,Mysql,Select,Mariadb,Pivot Table,Group Concat,我有一张这样的桌子: fkey | sensor | depth | value -----+--------+-------+------- 1 | 1 | 1 | 34 1 | 1 | 2 | 27 1 | 2 | 1 | 22 1 | 2 | 2 | 34 1 | 2 | 3 | 56 2 | 1 | 1 | 12 2 | 1 |
fkey | sensor | depth | value
-----+--------+-------+-------
1 | 1 | 1 | 34
1 | 1 | 2 | 27
1 | 2 | 1 | 22
1 | 2 | 2 | 34
1 | 2 | 3 | 56
2 | 1 | 1 | 12
2 | 1 | 2 | 24
2 | 2 | 1 | 56
3 | 1 | 1 | 43
3 | 1 | 2 | 89
3 | 1 | 3 | 97
如何将选择查询写入每个传感器的GROUP\u CONCAT
值和ORDER BY
depth以显示此信息
fkey | sensor1_values | sensor2_values
-----+-----------------+------------------
1 | 34,27 | 22,34,56
2 | 12,24 | 56
3 | 43,89,97 | NULL
尝试使用
GROUP_CONCAT
和CASE
表达式以每个传感器数据为目标
SELECT
fkey,
GROUP_CONCAT(CASE WHEN sensor=1 THEN value END ORDER BY depth) AS sensor1_values,
GROUP_CONCAT(CASE WHEN sensor=2 THEN value END ORDER BY depth) AS sensor2_values
FROM yourTable
GROUP BY fkey;
通过替换表名和列名,尝试此查询 fkey为A列|传感器为B列|深度为C列|值为D列
select A, STUFF((SELECT ', ' + D FROM tableA b
WHERE b.A = a.A AND b.B = 1
FOR XML PATH('')), 1, 2, '') sensor1_values
, STUFF((SELECT ', ' + D FROM tableA b
WHERE b.A = a.A AND b.B = 2
FOR XML PATH('')), 1, 2, '') sensor2_values
from tableA a
group by A
非常感谢,它可以工作,但是我如何才能从中自动生成列名?@mojtabarvin您需要动态SQL才能生成列名,或者处理任意数量的传感器。这个问题是针对MySQL而不是SQL Server标记的。