选择具有相同列的所有行以分隔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标记的。