You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何实现两列数据追加为单列并按ID匹配输出多行结果

列转行实现两列纵向追加的SQL写法

需求说明

你需要实现的是列转行操作:将源表Table 1中每个ID对应的Name、Position两列值,纵向合并到User Role/Name字段下,每个ID生成2条对应记录。
源表结构与数据:

IDNamePosition
1MikeDeveloper
2MarkQA

期望输出结构:

IDUser Role/Name
1Mike
1Developer
2Mark
2QA

方案1:全兼容UNION ALL写法(推荐新手使用)

该写法支持所有SQL数据库(MySQL、SQL Server、Oracle、PostgreSQL、SQLite等),逻辑清晰不易出错:

SELECT ID, Name AS `User Role/Name` FROM `Table 1`
UNION ALL
SELECT ID, Position AS `User Role/Name` FROM `Table 1`
ORDER BY ID;

注意:必须使用UNION ALL而非UNION:UNION会自动对结果去重,若遇到同一ID下Name和Position取值相同的场景会误删有效行;UNION ALL直接拼接结果集,不会丢数据且执行效率更高。


方案2:专用UNPIVOT语法(适用于SQL Server、Oracle)

支持原生UNPIVOT语法的数据库可以使用该写法,执行性能优于UNION ALL:

SELECT ID, `User Role/Name`
FROM `Table 1`
UNPIVOT (
    `User Role/Name` FOR col_type IN (Name, Position)
) AS unpivot_result;

方案3:LATERAL JOIN写法(适用于PostgreSQL、MySQL 8.0+)

支持横向连接的数据库可以使用该写法,适合需要同时拆分列数较多的场景:

SELECT t.ID, v.`User Role/Name`
FROM `Table 1` t,
LATERAL (
    SELECT t.Name AS `User Role/Name`
    UNION ALL
    SELECT t.Position AS `User Role/Name`
) v;

内容的提问来源于stack exchange,提问作者Ross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:45:32