将 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 结果导入新表并匹配键的主要内容,如果未能解决你的问题,请参考以下文章
SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)