其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

mysql存储函数将横向变竖向

GG网络技术分享 2025-03-18 16:17 0


MySQL存储函数可以让我们将横向排列的数据竖向排列,这样更适合我们进行数据分析。下面我们来介绍一下如何利用MySQL存储函数进行横向转竖向。

DELIMITER $$

CREATE FUNCTION transpose(

IN tableName VARCHAR(128),

IN primaryKey VARCHAR(128),

IN transposeColumn VARCHAR(128),

IN valueColumn VARCHAR(128)

)

RETURNS TEXT

DETERMINISTIC

BEGIN

SET @query = CONCAT(

\'SELECT DISTINCT CONCAT(\\\'\"\\\', \', primaryKey, \', \\\'\"\\\') AS pivot_column, \',

GROUP_CONCAT(

CONCAT(

\'MAX(IF(\', transposeColumn, \' = \\\'\', REPLACE(`\', transposeColumn, \'`\', \'\\\'\', \'\\\'\\\'\'), \'\\\', \\\'\"\\\', \', valueColumn, \', \\\'\"\\\', NULL)) AS \',

CONCAT(\'\\\"\', REPLACE(`\', transposeColumn, \'`\', \'\\\'\', \'\'\\\'), \'\\\"\')

)

ORDER BY transposeColumn

SEPARATOR \',\\n \'

),

\' FROM \', tableName, \' GROUP BY \', primaryKey

);

PREPARE statement FROM @query;

EXECUTE statement;

DEALLOCATE PREPARE statement;

END$$

DELIMITER ;

上面的代码中,我们创建了一个名为“transpose”的函数,它接受四个参数:“tableName”(要转置的表名)、“primaryKey”(主键列名)、“transposeColumn”(要转置的列名)和“valueColumn”(每个单元格的值所在的列名)。

在函数内部,我们使用了MySQL的动态查询语句来生成转置后的结果集。首先,我们使用“CONCAT”函数将每个单元格的值转换为字符串,并拼接成一个逗号分隔的字符串,作为结果集的一部分。接着,我们使用“GROUP_CONCAT”函数将这些字符串拼接成最终的结果集。

最后,我们使用“PREPARE”和“EXECUTE”语句来动态执行生成的查询语句,并返回结果。

使用这个函数非常简单,只需要传入四个参数即可:

SELECT transpose(\'my_table\', \'id\', \'month\', \'value\');

上面的代码将会将“my_table”表中的数据转置,主键列为“id”,要转置的列为“month”,每个单元格的值所在的列为“value”。

标签: 函数 字符串

提交需求或反馈

Demand feedback