gpt4 book ai didi

sql - 将数据从 SQL Server 表复制到同一个表

转载 作者:搜寻专家 更新时间:2023-10-30 20:16:12 25 4
gpt4 key购买 nike

我有一个名为 Customer 的数据库,其中有一个名为 CustDetails 的表。表中的数据与下图类似(为简洁起见,我删除了部分数据)。 ID 是主键。

客户详情:

ID  CustNo  Year  StatusId
--------------------------
1 1231 2015 1
2 1232 2015 2
3 1233 2015 2
4 1234 2014 1
5 1235 2014 2

我在同一台服务器上有另一个名为 Claim 的数据库,它有一个名为 ClaimDetails 的表(不要问我为什么这些表不在同一个数据库中但设计决定是在我加入之前做出的,我无法改变。)

数据类似于下面(再次为简洁起见删除了一些数据)

claim 详情:

ID  ClaimNumber CustNo
----------------------
1 1 1231
2 2 1232
3 3 1236
4 4 1237

我有几件事要完成:

  1. 复制 CustDetails 中年份为 2015 年的所有行并将年份更改为 2016
  2. 如果第 1 部分结果中的状态为 2,则 2016 年将其设置为 1
  3. 创建一个否定列表以查找 ClaimDetails 表中但不在 CustDetails 表中的 CustNo - 对于这些在 CustDetails 表中创建一个新行,并将状态设置为 3,将年份设置为 2016。

所以对于我上面列出的数据,我想要实现的最终结果是:

客户详情:

    ID  CustNo  Year  StatusId
--------------------------
1 1231 2015 1
2 1232 2015 2
3 1233 2015 2
4 1234 2014 1
5 1235 2014 2
6 1231 2016 1
7 1232 2016 1
8 1233 2016 1
9 1236 2016 3
10 1237 2016 3

到目前为止我有这个查询:

insert into CustDetails (CustNo, Year, StatusId)
select
CustNo, 2016, StatusId
from
CustDetails
where
Year = 2015

这涵盖了第 1 部分。我没有为上面的查询中的第 2 部分准备逻辑,我想我可以这样做:

UPDATE CustDetails 
SET StatusId = 1
WHERE Year = 2016 AND StatusId = 2

同样,我没有完成第 3 部分的查询,但我想我可以获得 ClaimDetails 中但不在 中的 CustNo CustDetails 通过做类似的事情:

SELECT CustNo 
FROM ClaimDetails
WHERE CustNo NOT IN (SELECT CustNo FROM CustDetails)

然后分别为每个 CustNo 创建 ID。

问题是这是执行此操作的最佳方法还是我应该先执行类似复制到临时表的操作。第三部分的查询是否可以正常工作,即使它们是两个独立的数据库 - 我想如果它们在同一台服务器上,只要我完全符合数据库的条件,它应该可以正常工作。

最佳答案

实际上,对于您的第二个查询,您还将更新在执行第一个查询之前已经存在的旧数据。所以我建议像这样使用 CASE WHEN:

INSERT INTO CustDetails (CustNo, Year, StatusId)
SELECT CustNo, 2016, CASE WHEN StatusId = 2 THEN 1 ELSE StatusId END
FROM CustDetails
WHERE Year = 2015

第三个查询也可以使用 INSERT INTO SELECT 类似地完成:

INSERT INTO CustDetails (CustNo, Year, StatusId)
SELECT CustNo, 2016, 3
FROM ClaimDetails
WHERE CustNo NOT IN (SELECT CustNo FROM CustDetails)

您将必须完全限定包括架构名称在内的数据库作为DatabaseName.SchemaName.TableName 用于多数据库查询。

关于sql - 将数据从 SQL Server 表复制到同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39068329/

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