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

如何将临时表的单列数据插入到主表的多列中?

解决临时表单列多行数据插入主表多列的问题

我来帮你搞定这个需求——把临时表的单列6行数据,对应插入到主表t_Act的6个列中。核心思路是先给临时表的每行数据标记行号,再通过行转列的方式把单列数据转换成一行多列,最后插入主表。

步骤1:给临时表添加行号

首先我们需要给临时表的每条数据加上行号,这样才能精准对应主表的各个列。假设你的临时表名为#temp,执行以下SQL:

-- 创建带行号的临时表,行号对应主表的列顺序
SELECT 
    col,
    ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS row_num
INTO #temp_with_row_num
FROM #temp; -- 替换成你的实际临时表名称

注意:ORDER BY (SELECT NULL)是因为临时表没有天然的排序字段,如果你的临时表数据顺序是固定的,这个写法没问题;如果有明确的排序依据(比如插入顺序的标识列),可以把(SELECT NULL)替换成对应的列,确保行号和主表列的对应关系完全正确。

步骤2:行转列并插入主表

接下来我们用条件聚合的方式把单列多行转成一行多列,然后插入主表:

-- 将转换后的数据插入主表t_Act
INSERT INTO [dbo].[t_Act] (
    EventType, 
    ClientMsgID, 
    SessionID, 
    Protocol, 
    MessageType, 
    SequenceNumber
)
SELECT
    MAX(CASE WHEN row_num = 1 THEN col END) AS EventType,
    MAX(CASE WHEN row_num = 2 THEN col END) AS ClientMsgID,
    MAX(CASE WHEN row_num = 3 THEN col END) AS SessionID,
    MAX(CASE WHEN row_num = 4 THEN col END) AS Protocol,
    MAX(CASE WHEN row_num = 5 THEN col END) AS MessageType,
    MAX(CASE WHEN row_num = 6 THEN col END) AS SequenceNumber
FROM #temp_with_row_num;

如果你习惯用PIVOT语法,也可以这样写:

INSERT INTO [dbo].[t_Act] (
    EventType, 
    ClientMsgID, 
    SessionID, 
    Protocol, 
    MessageType, 
    SequenceNumber
)
SELECT [1], [2], [3], [4], [5], [6]
FROM (
    SELECT col, row_num
    FROM #temp_with_row_num
) AS source_data
PIVOT (
    MAX(col)
    FOR row_num IN ([1], [2], [3], [4], [5], [6])
) AS pivot_table;

验证结果

执行完上面的SQL后,你可以查询主表确认数据是否正确插入:

SELECT * FROM [dbo].[t_Act];

应该会看到一行数据,各个列分别对应临时表的6行值:23041、ORF5674、FNRA、FIX_44、0、AE。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:13:20