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

如何将单条SQL记录转换为纵向行并插入指定表中

需求与解决方案

现有表结构与数据

存在employee表,包含字段:NAME、AGE、SALARY、DESIGNATION、COURSE、JOIN_DATE,表中数据如下:

A,24,2400,Sr,Developer,10-JUN-23  
B,24,2400,Jr,Developer,10-JUN-23
C,24,2400,Tr,Developer,10-JUN-23
D,24,2400,Sr,Developer,10-JUN-23

已有的查询语句

用于查询NAME为'A'的单条记录:

select * from employee where NAME='A';

需求

需要将上述查询结果的所有字段值以纵向单行的形式插入到Student_A表中,该表仅包含DETAILS字段(类型为varchar2(4000)),插入后期望结果如下:

DETAILS 
A
24
2400
Sr
Developer
10-JUN-23

实现方案

方法1:使用UNION ALL逐个字段转换

通过UNION ALL将每个字段的值分别查询并合并为多行,注意将非字符类型(如AGE、SALARY、JOIN_DATE)转换为字符串类型:

INSERT INTO Student_A (DETAILS)
SELECT NAME FROM employee WHERE NAME='A'
UNION ALL
SELECT TO_CHAR(AGE) FROM employee WHERE NAME='A'
UNION ALL
SELECT TO_CHAR(SALARY) FROM employee WHERE NAME='A'
UNION ALL
SELECT DESIGNATION FROM employee WHERE NAME='A'
UNION ALL
SELECT COURSE FROM employee WHERE NAME='A'
UNION ALL
SELECT TO_CHAR(JOIN_DATE, 'DD-MON-RR') FROM employee WHERE NAME='A';

方法2:使用UNPIVOT行转列(更简洁)

利用Oracle的UNPIVOT语法将原记录的列转换为行,先将所有字段统一转换为字符串类型,再进行行转列:

INSERT INTO Student_A (DETAILS)
SELECT detail_value
FROM (
    SELECT NAME, 
           TO_CHAR(AGE) AS AGE, 
           TO_CHAR(SALARY) AS SALARY,
           DESIGNATION, 
           COURSE, 
           TO_CHAR(JOIN_DATE, 'DD-MON-RR') AS JOIN_DATE
    FROM employee
    WHERE NAME='A'
)
UNPIVOT (
    detail_value FOR detail_column IN (NAME, AGE, SALARY, DESIGNATION, COURSE, JOIN_DATE)
);

两种方法都能实现需求,方法2在字段较多时更易维护,无需重复编写WHERE条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:17:52