【发布时间】:2020-09-19 00:59:20
【问题描述】:
我在两个数据库(dbSource 和 dbTarget)中有同一个表,我正在尝试编写一个查询来将每个表中的字段值与源/目标差异进行比较。
这是表结构:
CREATE TABLE [dbo].[tblWidget](
[ID] [int] NOT NULL,
[Description] [varchar](50) NOT NULL,
[UpdatedBy] [varchar](50) NOT NULL,
CONSTRAINT [PK_tblWidget] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
为简单起见,我会说每个数据库中的表只有一行:
[dbSource]:
[dbTarget]:
我希望结果如下所示:
我能得到的最接近结果的是 PIVOT 查询,它只返回一个字段 (UpdatedBy)。
有没有一种简单的方法可以在一个查询中包含所有字段,而不是使用多个 PIVOT 语句执行某种 UNION?
我意识到如果有不止一行(例如:ID = 2 的行),预期的结果将没有意义,所以请假设我只会比较数据库之间的一行。
这是我目前所拥有的:
SELECT 'UpdatedBy' Field, [0] AS [Source], [1] AS [Target]
FROM
(
SELECT [ID]
,[Description]
,[UpdatedBy]
,1 IsSource
FROM [dbSource].[dbo].[tblWidget]
UNION ALL
SELECT [ID]
,[Description]
,[UpdatedBy]
,0 IsSource
FROM [dbTarget].[dbo].[tblWidget]
) a
PIVOT (
MAX(UpdatedBy)
FOR IsSource IN ([0], [1])
) AS pvt
谢谢
【问题讨论】:
-
请使用文本,而不是图像/链接,以获取文本中的内容。请在代码问题中提供minimal reproducible example。 How to Askhelp center
标签: sql sql-server inner-join unpivot sql-server-2019