1

こんにちは、Test1 と Test2 の 2 つのテーブルがあります。

一方は他方のコピーであるため、同じ列 (ID、LastDiaryEvent、Impact、Prority、Status、Name) と値を持ちます。Test1 は更新を取得し、列の 1 つの値を変更します (例として Status とします)。

2 つのテーブルを比較するコードを知っている

select * from Test1
except
select * from Test2;

しかし、これにより行全体が返され、変更された値を指定する必要があります。

そう、

テスト1 + テスト2

ID  LastDiaryEvent  Impact  Priority    Status      Name
277199  2013-07-10  Problem Standard    Customer    BAILEYB

次に、TEST1テーブルが更新されるため、行が読み取られます

ID  LastDiaryEvent  Impact  Priority    Status      Name
277199  2013-07-10  Problem Standard    Action          BAILEYB

そのため、ステータス値が変更されました。2 つの行を比較できますが、変更されたのが Status 値であることを指定する方法を知りたいです。例として Status を使用していることに注意してください。ID 値のみが変更されません。

これを行う方法はありますか?

ありがとう

4

3 に答える 3

0

これはうまくいきます:

SELECT 'Status Change' as Change, t1.*
FROM table1 t1
JOIN table2 t2 on t1.ID = t2.ID 
WHERE t1.Status != t2.Status
UNION ALL
SELECT 'LastDiaryEvent Change' as Change, t1.*
FROM table1 t1
JOIN table2 t2 on t1.ID = t2.ID 
WHERE t1.LastDiaryEvent != t2.LastDiaryEvent
UNION ALL
SELECT 'Priority Change' as Change, t1.*
FROM table1 t1
JOIN table2 t2 on t1.ID = t2.ID 
WHERE t1.Priority != t2.Priority

これは次のとおりです。

SELECT CASE WHEN t1.Status != t2.Status THEN 'Status Change' 
            WHEN t1.LastDiaryEvent != t2.LastDiaryEvent) THEN 'LastDiaryEvent Change'
            WHEN t1.Priority != t2.Priority THEN 'Priority Change' 
            ELSE 'Panic!'END AS Chanage, t1.*
FROM table1 t1
JOIN table2 t2 on t1.ID = t2.ID 
WHERE t1.Status != t2.Status OR
 t1.LastDiaryEvent != t2.LastDiaryEvent OR
 t1.Priority != t2.Priority

NB - 私は ID = ID でのみ参加します...データモデルが指示するように、より多くのものに参加したい/必要があるかもしれません。

于 2013-07-04T15:02:28.940 に答える