假设我有以下表结构:
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
FixedColumn1
和FixedColumn2
的组合为unique(like a primary key).
我知道如何在使用DataTables
的代码中执行此操作,但可以在sql
中使用吗?
编辑:
因此,基本上Table1将在某个时刻更新并保存在SameTable1Updated中(某些行将更改,某些行将被完全删除或某些行将被添加)。如果行值已从Table1更改并仍显示在SameTable1Updated中,则会将参数Change
添加为Modified
,并将OldValue
添加到表and with the new value from
SameTable1Updated {{1将. If the row will be completely removed from Table1, it will appear with the parameter
已删除as
OldValue and with
Table1 parameter as the values from
NewValue`参数更改为所有记录的null。
而另一种方法是在Table2中新添加的行。
我已经以最好的方式解释了这种情况。如果您需要更多信息,请与我们联系。
答案 0 :(得分: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