【发布时间】:2020-10-19 12:47:36
【问题描述】:
我有一个表格,其中填充了来自需要标准化的制造系统的数据。此暂存表有一个关键字段 - LOTCODE - 加上 6 个 PARTSTATUS 字段,以及 PART1、PART2 等的状态代码 (INT)。
我想每隔一小时查询临时表,并为找到的每一行将 6 行插入存档表,该存档表将包含关键字段 LOTCODE 和 PARTLOCATION 以及第三个字段 PARTSTATUS。将数据插入存档表后,临时表中的行将被删除。
有没有办法只用查询来做到这一点,还是我需要逐行遍历暂存表,在存档表中插入 6 行,然后删除原始行?
数据库是 MS SQL 2016。制造系统每小时将向临时表添加大约 1440 行。
暂存表示例行:
Lot, Part1Status, Part2Status, Part3Status, Part4Status, Part5Status, Part6Status
ABCDE, 1010, 1010, -50, 1010, 990, 1010
存档表示例数据
Lot, PartLocation, Stats
ABCDE, 1, 1010
ABCDE, 2, 1010
ABCDE, 3, -50
ABCDE, 4, 1010
ABCDE, 5, 990
ABCDE, 6, 1010
【问题讨论】:
-
请提供样本数据和期望的结果。这听起来像是一些非常简单的
insert操作。 -
此操作称为“反透视”。有很多方法可以做到——
UNPIVOT子句、CROSS APPLY、... -
@Jpoole 。 . .为什么要删除临时表中的行?这似乎是不必要的开销。
-
在归档表中标准化后,没有理由保留未标准化的数据。将有数百万行也会浪费空间。
标签: sql sql-server unpivot