如何编写 sql 脚本,通过 table 游标并插入到不同的 table

How to write a sql script that cursors through a table and inserts into a different table

我是 sql 服务器的新手,我有以下 table 结构,其中包含一千多行。 但出于示例目的,这就是它的样子

Table 导入

+------+---------+------------+------------+------------+------------+------------+
| Name |  Code   | SocksTotal | GlovesTotal| JeansTotal | ShirtsTotal| shoesTotal |
+------+---------+------------+------------+------------+------------+------------+
| OT   |   45612 |          2 |          1 |          0 |          1 |          4 | 
| OT   |    1234 |          0 |          1 |          0 |          0 |          0 | 
| US   |    45896|          0 |          0 |          0 |          0 |          0 | 
+------+---------+------------+------------+------------+------------+------------+

第二个 table 名为 Items

+------+---------+
| ID   |  Item   | 
+------+---------+
| 1    |   socks |
| 2    |   Gloves|
| 3    |   Jeans |
| 4    |   Shirts|
| 5    |   shoes |
+------+---------+

从上面的 tables 我需要编写一个脚本,该脚本将被插入到另一个名为 ImportItems_Summary 的 table 中。 预期输出是

+------+---------+------------+------------+
| Id   |  Code   | Items_id   |Import_total|
+------+---------+------------+------------+
| 1    |   45612 |          1 |          2 |
| 2    |   45612 |          2 |          1 |
| 3    |   45612 |          4 |          1 |
| 4    |   45612 |          5 |          4 |
| 5    |   1234  |          2 |          1 |
+------+---------+------------+------------+

正如您在此处看到的那样,代码 45612 现在在 ImportItems_summary table 中有 4 个条目,其中项目不等于 0,并且 Items_id 链接到项目 table ID列。

我怎样才能实现上述输出?..我读了一遍,看到一个游标可能会有帮助,但我不确定如何实现这个

一种方法使用 cross apply 将未规范化的 table 的列反透视为行,然后将项目 table 带上 join,最后插入目标 table:

insert into ImportItems_Summary (code, items_id, import_total)
select im.code, it.items_id, x.import_total
from import im
cross apply (values 
    ('socks',  sockstotal),
    ('gloves', glovestotal),
    ('jeans',  jeanstotal),
    ('shirts', shirtstotal),
    ('shoes',  shoestotal)
) x(item, import_total)
inner join items it on it.item = x.item