2017-08-18 15 views
1

のは、私は次の表の構造を持っているとしましょう:を選択した列

Table1 

     FixedColumn1 FixedColumn2 ChangingColumn1 ChangingColumn2 
     Test1  Test11  1    3 
     Test2  Test22  2    5 

同じTable1私は、同じ構造を持つ別のテーブルに

SameTable1Updated 

     FixedColumn1 FixedColumn2 ChangingColumn1 ChangingColumn2 
     Test1  Test11  77    23 
     Test2  Test22  22    5 
     Test3  Test33  5    null 

を更新して保存次の表に、変更したデータを保存します:

DifferencesTable 

FixedColumn1 FixedColumn2 Change   ColumnName  NewValue OldValue 
Test1  Test11  Modified  ChangingColumn1 77  1 
Test1  Test11  Modified  ChangingColumn2 23  3 
Test2  Test22  Modified  ChangingColumn1 22  2 
Test3  Test33  Added   ChangingColumn1 5  null 

FixedColumn1FixedColumn2の組み合わせは、私がDataTablesでの作業のコードでこれを行う方法についてのアイデアを持っているが、それはsqlで可能ですunique(like a primary key).

のですか?

編集:

だから基本的には表1は、いくつかの時点で更新され、SameTable1Updatedに保存されます(一部の行は、いくつかは完全に削除されますまたは一部が追加され、変更されます)。行の値は、表1から変更し、まだSameTable1Updatedに表示されている場合、彼らはModifiedとしてパラメータChangeに追加され、OldValueと表and with the new value from SameTable1Updated . If the row will be completely removed from Table1, it will appear with the parameter ChangeからasすべてのレコードのNULLとしてand with OldValueプロパティparameter as the values from表1 and NewValue`パラメータを削除しました。 そして、表2の新しく追加された行については逆です。

私は可能な限り最良の状況を説明しました。詳しい情報が必要な場合はお知らせください。

+0

私は考えているが、それは私の頭にはっきりしていない。どのテーブルに新しい値がありますか?最初か二番目?あなたの期待される出力では、新しい値 '77'と' 3'が両方のテーブルから来ています。もう少し説明できますか? – Badiparmagi

+0

クエリ構築ロジック(DifferencesTableロジック)を記述してください – Vecchiasignora

+0

@Badiparmagi、@Vecchiasignora私は詳細を別のDifferencesTable構造で質問を更新しましたので、私の論理を説明することができます –

答えて

0

ChangingColumn1の変更を見つけるためにテーブルを結合します。 ChangingColumn2の変更についても同じ操作を行います。 UNION ALL結果:

select t1.FixedColumn1, t1.FixedColumn2, 
     stu.ChangingColumn1 as NewValue, t1.ChangingColumn1 as OldValue 
from Table1 t1 
join SameTable1Updated stu 
    on t1.FixedColumn1 = stu.FixedColumn1 
    and t1.FixedColumn2 = stu.FixedColumn2 
    and t1.ChangingColumn1 <> stu.ChangingColumn1 
UNION ALL 
select t1.FixedColumn1, t1.FixedColumn2, 
     stu.ChangingColumn2 as NewValue, t1.ChangingColumn2 as OldValue 
from Table1 t1 
join SameTable1Updated stu 
    on t1.FixedColumn1 = stu.FixedColumn1 
    and t1.FixedColumn2 = stu.FixedColumn2 
    and t1.ChangingColumn2 <> stu.ChangingColumn2 
order by t1.FixedColumn1, t1.FixedColumn2 
+0

質問を別の構造。答えてくれてありがとう。私はあなたの答えをテストし、それに応じて私の構造にそれを更新しようとします。 –

+0

削除された行はどうですか? – jarlh

+0

私はそれを私ができる最善の方法で編集して説明しました。まだ不明な点があれば、私はもう一度やり直すことができます。これらの値は、Differencesテーブルに、値が「OldValue」列、値が「NewValue」列、および「Change」列値が「Removed」と表示されます。 –

関連する問題