gpt4 book ai didi

用于聚合列值的 SQL 脚本

转载 作者:行者123 更新时间:2023-12-04 07:09:43 25 4
gpt4 key购买 nike

我很感激一些帮助将 sql 脚本放在一起以将数据从一个表复制到另一个表的帮助。基本上我需要对源表中的每一行做的是聚合列值并将它们存储到目标表中的单个列中。

TableA: ID, ColumnA, ColumnB, ColumnC
TableB: Identity, ColumnX

因此,ColumnX 需要类似于“ColumnA、ColumnB、ColumnC”。

此外,我需要跟踪每个 TableA.ID -> SCOPE_IDENTITY() 映射以更新第三个表。

提前致谢!

编辑:TableA.ID 与 TableB.Identity 不同。 TableB.Identity 将在插入时返回一个新的标识值。所以要么我需要将映射存储在临时表中,要么在每次插入 TableB 时更新 TableC。

最佳答案

这是一个逐行处理示例。这将以一种您可以一次处理每一行的方式为您提供结果。或者您可以在最后使用 TableC 并执行您需要执行的任何处理。

但是,如果您向 TableB(称为 TableA_ID)添加一个额外的列并将结果插入其中,速度会快很多。您可以即时访问 TableA.ID 和 TableB.Identity。但是如果不知道您的确切情况,这可能不可行。 (但您始终可以添加该列,然后再将其删除!)

USE tempdb
GO

CREATE TABLE TableA (
ID int NOT NULL PRIMARY KEY,
ColumnA varchar(10) NOT NULL,
ColumnB varchar(10) NOT NULL,
ColumnC varchar(10) NOT NULL
)

CREATE TABLE TableB (
[Identity] int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ColumnX varchar(30) NOT NULL
)

CREATE TABLE TableC (
TableA_ID int NOT NULL,
TableB_ID int NOT NULL,
PRIMARY KEY (TableA_ID, TableB_ID)
)

GO

INSERT INTO TableA VALUES (1, 'A', 'A', 'A')
INSERT INTO TableA VALUES (2, 'A', 'A', 'B')
INSERT INTO TableA VALUES (3, 'A', 'A', 'C')
INSERT INTO TableA VALUES (11, 'A', 'B', 'A')
INSERT INTO TableA VALUES (12, 'A', 'B', 'B')
INSERT INTO TableA VALUES (13, 'A', 'B', 'C')
INSERT INTO TableA VALUES (21, 'A', 'C', 'A')
INSERT INTO TableA VALUES (22, 'A', 'C', 'B')
INSERT INTO TableA VALUES (23, 'A', 'C', 'C')
GO

-- Do row-by-row processing to get the desired results
SET NOCOUNT ON
DECLARE @TableA_ID int
DECLARE @TableB_Identity int
DECLARE @ColumnX varchar(100)

SET @TableA_ID = 0

WHILE 1=1 BEGIN

-- Get the next row to process
SELECT TOP 1
@TableA_ID=ID,
@ColumnX = ColumnA + ColumnB + ColumnC
FROM TableA
WHERE ID > @TableA_ID

-- Check if we are all done
IF @@ROWCOUNT = 0
BREAK

-- Insert row into TableB
INSERT INTO TableB (ColumnX)
SELECT @ColumnX

-- Get the identity of the new row
SET @TableB_Identity = SCOPE_IDENTITY()

-- At this point, you have @TableA_ID and @TableB_Identity.
-- Go to town with whatever extra processing you need to do
INSERT INTO TableC (TableA_ID, TableB_ID)
SELECT @TableA_ID, @TableB_Identity

END
GO

SELECT * FROM TableC
GO

从表A中选择*
ID          ColumnA    ColumnB    ColumnC
----------- ---------- ---------- ----------
1 A A A
2 A A B
3 A A C
11 A B A
12 A B B
13 A B C
21 A C A
22 A C B
23 A C C

从表 B 中选择 *
Identity    ColumnX
----------- ------------------------------
1 AAA
2 AAB
3 AAC
4 ABA
5 ABB
6 ABC
7 ACA
8 ACB
9 ACC

从表C中选择*
TableA_ID   TableB_ID
----------- -----------
1 1
2 2
3 3
11 4
12 5
13 6
21 7
22 8
23 9

关于用于聚合列值的 SQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/568310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com