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

如何在SQL中将单条记录的字段值逐行展示并关联固定唯一ID?

在SQL中将单条记录字段值逐行展示的实现方法

需求说明

原数据表单条记录:

EMPID EMPNAME EMPADDRESS  EMPCOUNTRY
1     TEST    HYD         INDIA

需要转换为多行格式(其中ID为固定的独立唯一值,示例中为10):

ID   VALUE
10   TEST
10   HYD
10   INDIA

各主流数据库实现方案

MySQL

通过UNION ALL手动拼接结果集,这是最通用的方式:

SELECT 10 AS ID, EMPNAME AS VALUE FROM your_table WHERE EMPID = 1
UNION ALL
SELECT 10 AS ID, EMPADDRESS AS VALUE FROM your_table WHERE EMPID = 1
UNION ALL
SELECT 10 AS ID, EMPCOUNTRY AS VALUE FROM your_table WHERE EMPID = 1;

SQL Server

可以使用内置的UNPIVOT操作符,语法更简洁:

SELECT 10 AS ID, unpivoted.VALUE
FROM your_table
UNPIVOT (
    VALUE FOR Columns IN (EMPNAME, EMPADDRESS, EMPCOUNTRY)
) AS unpivoted
WHERE EMPID = 1;

PostgreSQL

利用UNNEST函数拆分数组,实现字段转多行:

SELECT 10 AS ID, UNNEST(ARRAY[EMPNAME, EMPADDRESS, EMPCOUNTRY]) AS VALUE
FROM your_table
WHERE EMPID = 1;

Oracle

除了通用的UNION ALL方式,还可以用XMLTABLE来拆分字段值:

SELECT 10 AS ID, column_value AS VALUE
FROM your_table,
     XMLTABLE(
         '("' || EMPNAME || '","' || EMPADDRESS || '","' || EMPCOUNTRY || '")'
     )
WHERE EMPID = 1;

注意事项

  • 替换语句中的your_table为实际数据表名称
  • 如果ID不是固定值,而是表中的某个字段,直接将10替换为对应字段名即可
  • UNION ALL会保留重复的字段值,若需要去重可改用UNION,但会牺牲部分查询性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:33:38