mysql 行转列

以下是其中比较常见的几种方法:

  1. 使用GROUP_CONCAT函数

    可以使用GROUP_CONCAT函数将多行数据合并为一行,并以逗号或其他分隔符进行分隔。通过SELECT语句和GROUP BY子句,可以将数据行转换为列。具体语法如下:

SELECT    id,    GROUP_CONCAT(CASE WHEN status = 'A' THEN value ELSE NULL END) AS 'statusA',    GROUP_CONCAT(CASE WHEN status = 'B' THEN value ELSE NULL END) AS 'statusB',    GROUP_CONCAT(CASE WHEN status = 'C' THEN value ELSE NULL END) AS 'statusC'FROM    your_tableGROUP BY    id;

其中,id表示非透视列,status表示需要转换为列的字段,value表示需要被转换的数据。

  1. 使用子查询

    可以使用子查询将变量名称作为列名,然后将数据行转换为列。具体语法如下:

SELECT    id,    (SELECT value FROM your_table WHERE id=t.id AND status='A') AS 'statusA',    (SELECT value FROM your_table WHERE id=t.id AND status='B') AS 'statusB',    (SELECT value FROM your_table WHERE id=t.id AND status='C') AS 'statusC'FROM    (SELECT DISTINCT id FROM your_table) AS t;

其中,id表示非透视列,status表示需要转换为列的字段,value表示需要被转换的数据。

  1. 使用连接和中间表

    可以使用临时表或中间表来将行数据转换为列数据。具体语法如下:

CREATE TEMPORARY TABLE temp_tableSELECT    id,    MAX(CASE WHEN status = 'A' THEN value ELSE NULL END) AS 'statusA',    MAX(CASE WHEN status = 'B' THEN value ELSE NULL END) AS 'statusB',    MAX(CASE WHEN status = 'C' THEN value ELSE NULL END) AS 'statusC'FROM    your_tableGROUP BY    id;SELECT * FROM temp_table;

以上语句将行数据转换为列数据,并将结果存储在中间表temp_table中。使用SELECT语句从临时表中读取数据即可。

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/aab23cbfa6.html