簡體   English   中英

SQL Server 2008比較同一數據庫中的兩個表,並更改get列

[英]SQL Server 2008 compare two tables in same database and get column is changed

我需要得到兩個表之間的區別。 我需要比較兩個表中的“產品”,“數量”和“價格”列,並說出它的新記錄還是我需要提及更改哪個列值。

示例表A

Product | Qty | Price | Comments

A          20    500     xyz
B          50    200     xyz
C          90    100     abc

示例表B

Product | Qty | Price | Comments

A          20    500     sd
B          70    200     cv
C          90    200     wsd
D          50    500     xyz

目前,我正在使用Expect,它會提供所有新的/不匹配的行。

select Product,Qty,Price 
from TableB 
except 
select Product,Qty,Price 
from TableA

Product | Qty | Price 
B          70    200   
C          90    200   
D          50    500   

但是我需要如下結果集

Product |  Result

B          Updated Qty
C          Updated Price
D          New

您可以使用LEFT JOIN進行此操作:

SELECT  b.Product,
        b.Qty,
        b.Price,
        Result = CASE WHEN a.product IS NULL THEN 'New'
                    ELSE 'Updated: ' + 
                        STUFF(  CASE WHEN a.Qty != b.Qty THEN ',Qty' ELSE '' END + 
                                CASE WHEN a.Price != b.Price THEN ',Price' ELSE '' END,
                            1, 1, '')
                END
FROM    TableB b    
        LEFT JOIN TableA a
            ON a.Product = b.Product
WHERE   a.Product IS NULL
OR      a.Qty != b.Qty
OR      a.Price != b.Price;

SQL小提琴示例

當然,這不是最簡潔的方法,但是可讀性強並且可能有效:

SELECT B.Product,
       Result = 'Updated Qty'
FROM TableB B 
LEFT OUTER JOIN TableA A
    ON B.Product = A.Product 
WHERE A.Product IS NOT NULL 
AND A.Qty <> B.Qty
AND A.Price = B.Price

UNION ALL

SELECT B.Product,
       Result = 'Updated Price'
FROM TableB B 
LEFT OUTER JOIN TableA A
    ON B.Product = A.Product 
WHERE A.Product IS NOT NULL 
AND A.Price <> B.Price
AND A.Qty = B.Qty

UNION ALL

SELECT B.Product,
       Result = 'Updated Qty and Price'
FROM TableB B 
LEFT OUTER JOIN TableA A
    ON B.Product = A.Product 
WHERE A.Product IS NOT NULL 
AND A.Price <> B.Price
AND A.Qty <> B.Qty

UNION ALL

SELECT B.Product,
       Result = 'New'
FROM TableB B 
LEFT OUTER JOIN TableA A
    ON B.Product = A.Product 
WHERE A.Product IS NULL

演示版

如果需要排序結果,則必須在外部查詢中執行此操作,例如here

暫無
暫無

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

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