如何编写 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
我是 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