如何使用SQL堆叠两列并标记数据来源列?
实现两列堆叠并标记原始来源列
你可以通过UNION ALL结合字符串拼接来实现需求,核心思路是分别处理每一列,将原始列名与A列值拼接后作为新的A列,再合并结果集。
通用SQL示例(适配多数数据库)
SELECT CONCAT(A, '_B') AS A, B AS new FROM 你的表名 UNION ALL SELECT CONCAT(A, '_C') AS A, C AS new FROM 你的表名
不同数据库的细节调整
- MySQL/MariaDB:直接使用上述
CONCAT函数即可 - SQL Server:除了
CONCAT,也可以用+拼接字符串:SELECT A + '_B' AS A, B AS new FROM 你的表名 UNION ALL SELECT A + '_C' AS A, C AS new FROM 你的表名 - PostgreSQL:支持
||拼接符或CONCAT函数:SELECT A || '_B' AS A, B AS new FROM 你的表名 UNION ALL SELECT A || '_C' AS A, C AS new FROM 你的表名
说明
- 使用
UNION ALL而非UNION,避免系统自动去重导致数据丢失(如果你的数据有重复且需要去重,可替换为UNION) - 如果需要堆叠更多列,只需继续添加对应
SELECT语句并用UNION ALL连接即可
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

