SQL 行转列的实现方法及示例代码

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

SQL 行转列 原始数据: A,B1 A,B2 A,B3

期望输出格式: A,B1,B2,B3

回答:

在 SQL 中,可以使用聚合函数和条件逻辑来实现行转列的操作。具体实现方式可能会因数据库管理系统(DBMS)的不同而有所差异。以下是一些常见的 DBMS 中实现行转列的示例。

假设你的原始数据表名为 original_table,包含两列 col1col2

在 MySQL 中使用 GROUP_CONCAT

SELECT col1, GROUP_CONCAT(col2 ORDER BY col2) AS concatenated_cols
FROM original_table
GROUP BY col1;

在 PostgreSQL 中使用 STRING_AGG

SELECT col1, STRING_AGG(col2, ',' ORDER BY col2) AS concatenated_cols
FROM original_table
GROUP BY col1;

在 SQL Server 中使用 FOR XML PATH

SELECT col1,
       STUFF((SELECT ',' + col2
              FROM original_table t2
              WHERE t1.col1 = t2.col1
              FOR XML PATH('')), 1, 1, '') AS concatenated_cols
FROM original_table t1
GROUP BY col1;

在 Oracle 中使用 LISTAGG

SELECT col1, LISTAGG(col2, ',') WITHIN GROUP (ORDER BY col2) AS concatenated_cols
FROM original_table
GROUP BY col1;

示例数据

假设你的表 original_table 的数据如下:

col1col2
AB1
AB2
AB3

期望输出

col1concatenated_cols
AB1,B2,B3

这些查询将会把相同 col1col2 值合并成一个逗号分隔的字符串,从而实现行转列的效果。根据你的具体数据库选择相应的查询语句即可。