gpt4 book ai didi

sql - 合并具有重复数据的表

转载 作者:行者123 更新时间:2023-12-03 00:13:57 30 4
gpt4 key购买 nike

对于 SQL Server 数据仓库,我需要匹配 2 个包含大致相同数据的表。

显然还有更多的事情要做,所以重新定义任务不是一个选择:-)

给定 2 个表,A 和 B

表A:

id  | fid | type
-------------------
100 | 1 | cookies
110 | 1 | muffins
120 | 1 | muffins

表B:

id   | fid | type
--------------------
a220 | 1 | muffins
b220 | 1 | muffins

合并时(在此处应用 secret IT - SQL),它应该变成

A_B:

A_id | B_id | fid | type
---------------------------
100 | NULL | 1 | cookies
110 | a220 | 1 | muffins
120 | b220 | 1 | muffins

任何使用 T-SQL 的解决方案都是首选,性能不是问题。如果 SSIS 是一个更简单的选择,我可以接受。

<小时/>

这是一个用于创建测试环境供您使用的脚本。

/****** Object:  Table [dbo].[B]    ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[B](
[id] [varchar](10) NULL,
[fid] [int] NULL,
[type] [varchar](50) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[B] ([id], [fid], [type]) VALUES (N'a220', 1, N'muffins')
INSERT [dbo].[B] ([id], [fid], [type]) VALUES (N'b220', 1, N'muffins')
/****** Object: Table [dbo].[A] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[A](
[id] [varchar](10) NULL,
[fid] [int] NULL,
[type] [varchar](50) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[A] ([id], [fid], [type]) VALUES (N'100', 1, N'cookies')
INSERT [dbo].[A] ([id], [fid], [type]) VALUES (N'110', 1, N'muffins')
INSERT [dbo].[A] ([id], [fid], [type]) VALUES (N'120', 1, N'muffins')

最佳答案

假设您想要匹配 ID 的类型和顺序...

select a.id, b.id, ISNULL(a.fid,b.fid) fid, ISNULL(a.type,b.type) type
from
(select *, ROW_NUMBER() over (partition by type order by id) rn from a ) a
full outer join
(select *, ROW_NUMBER() over (partition by type order by id) rn from b ) b
on a.rn=b.rn
and a.type = b.type
order by a.id

关于sql - 合并具有重复数据的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12910287/

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