[英]SQL Server - Compare Fields in 2 Tables with PIVOT query
我在兩個數據庫( 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
謝謝
您可以連接兩個表,然后將列反透視為行:
select s.id, x.*
from dbsource.tblWidget s
inner join dbtarget.tblWidget t on t.id = s.id
cross apply (values
('Description', s.description, t.description),
('UpdatedBy', s.updatedby, t.updatedby)
) x (field, source, target)
這假設列id
可用於關聯兩個表 - 因此,在結果中為id
設置一行是沒有意義的(源值和目標值始終相同)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.