将 Unpivot 结果导入新表并匹配键

Posted

技术标签:

【中文标题】将 Unpivot 结果导入新表并匹配键【英文标题】:Import Unpivot results to new Table and match on Key 【发布时间】:2017-11-18 23:20:11 【问题描述】:

我目前有一些非透视查询,每个查询产生大约 2000 行。我需要获取这些查询的结果,并放入一个新表以匹配键。

查询示例:

Select DeviceSlot
  FROM tbl1
  unpivot(
  DeviceSlot
  For col in(
       col1,
       col2,
       col3,
  )
  )AS Unpivot

现在我需要匹配查询的结果,并将其插入到一个包含大约 20,000 行的新表中。 伪代码:

Insert Into tbl2(DeviceSlot)
  Select DeviceSlot
  FROM tbl1
  unpivot(
  DeviceSlot
  For col in(
       col1,
       col2,
       col3
  )
  )AS Unpivot2
  Where tbl1.key = tbl2.key

我一直很困惑如何做到这一点,如果不清楚,我深表歉意。 我还有另一个非透视查询对不同的列做同样的事情。

【问题讨论】:

【参考方案1】:

不确定您要的是什么。在反透视以“规范化”数据时,通常需要的“键”是在反透视期间派生的,例如,在未透视数据中重复原始表的 id 列下方以表示某个新表的外键。

SQL Fiddle

MS SQL Server 2014 架构设置

CREATE TABLE Table1
    ([id] int, [col1] varchar(2), [col2] varchar(2), [col3] varchar(2))
;

INSERT INTO Table1
    ([id], [col1], [col2], [col3])
VALUES
    (1, 'a', 'b', 'c'),
    (2, 'aa', 'bb', 'cc')
;

查询 1

select id as table1_fk, colheading, colvalue
from (
  select * from table1
  ) t
unpivot (
     colvalue for colheading in (col1, col2, col3) 
    ) u

Results

| table1_fk | colheading | colvalue |
|-----------|------------|----------|
|         1 |       col1 |        a |
|         1 |       col2 |        b |
|         1 |       col3 |        c |
|         2 |       col1 |       aa |
|         2 |       col2 |       bb |
|         2 |       col3 |       cc |

【讨论】:

以上是关于将 Unpivot 结果导入新表并匹配键的主要内容,如果未能解决你的问题,请参考以下文章

使用表格检查导入 Excel - access 2016

插入创建新表

将旧 SQL 表中的数据插入到新表中,列更改为行

SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

sql将查询结果保存为新表

TypeORM - 如何在生产模式下创建新表并自动运行迁移?