簡體   English   中英

SQL Server:比較兩個或多個表中的值

[英]SQL Server : compare values from two or more tables

我必須編寫一個查詢來比較兩個系統(系統A和系統B)之間的數據。在最終輸出表中,我應該具有SystemA_FieldSystemB_Field后跟SystemA_ValueSystemB_Value (請參見下文)。

這會將來自兩個系統的值與兩個系統的列名進行比較。

換句話說,列必須與列值一起位於行中。

在此處輸入圖片說明

內部查詢的結果有什么問題?

     SELECT     
         ContractType, 
         LeaseType,
         ContractNo,  
         ContractNumber
     FROM         
         TableOne INNER JOIN 
         TableA ON 
         ContractNo = ContractNumber
     WHERE     
         ContractNo = 101 

您不需要輸出ContractNo和ContractNumber,因為它們必須始終匹配:

SELECT t1.ContractNo, t2.ContractNumber,
CASE 
    WHEN t1.ContractType != t2.LeaseType THEN 'ContractType' 
    WHEN t1.[Address] != t2.AddressMain THEN 'Address' 
    ELSE 'N/A' END as SystemA_Field,
CASE 
    WHEN t1.ContractType != t2.LeaseType THEN 'LeaseType' 
    WHEN t1.[Address] != t2.AddressMain THEN 'AddressMain' 
    ELSE 'N/A' END as SystemB_Field,
CASE 
    WHEN t1.ContractType != t2.LeaseType THEN CAST(ContractType as VARCHAR)
    WHEN t1.[Address] != t2.AddressMain THEN CAST(Address as VARCHAR)
    ELSE 'N/A' END as SystemA_Value,
CASE 
    WHEN t1.ContractType != t2.LeaseType THEN CAST(LeaseType as VARCHAR)
    WHEN t1.[Address] != t2.AddressMain THEN CAST(AddressMain as VARCHAR)
    ELSE 'N/A' END as SystemB_Value
FROM Table1 as t1 
INNER JOIN Table2 as t2
ON t1.ContractNo = t2.ContractNumber
WHERE t1.ContractType != t2.LeaseType
OR t1.[Address] != t2.AddressMain

順便說一句,您是否看過Redgate的SQL比較? http://www.red-gate.com/products/sql-development/sql-comparison-sdk/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM