如何在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
相关产品推荐
相关产品推荐

