鑑於下表,我想獲取fruit
的每個值的兩列price
和qty
的更改歷史記錄。我使用MS SQL Server 2012的跟蹤T-SQL中每個表列的數據更改
因此,例如:
- 行1和3之間的變化是,蘋果的價格從 10下降到30這給第1行的結果表下面。
- 第2行和第4行之間的變化 是香蕉的價格從20變爲30 ,並且數量從2變爲3,這在 結果表中給出了第2行和第3行。
有沒有辦法做到這一點?有沒有辦法有效地做到這一點?
源表
+----+---------+--------+--------+---------+
| id | fruit | price | qty | created |
+----+---------+--------+--------+---------+
| 1 | apples | 10 | 1 | 1/1/16 |
+----+---------+--------+--------+---------+
| 2 | bananas | 20 | 2 | 1/1/16 |
+----+---------+--------+--------+---------+
| 3 | apples | 30 | 1 | 2/1/16 |
+----+---------+--------+--------+---------+
| 4 | bananas | 30 | 3 | 2/1/16 |
+----+---------+--------+--------+---------+
| 5 | apples | 30 | 2 | 3/1/16 |
+----+---------+--------+--------+---------+
| 6 | apples | 30 | 3 | 7/1/16 |
+----+---------+--------+--------+---------+
結果表
+----+----+--------+--------+--------+---------+
| id | fk | col | oldval | newval | changed |
+----+----+--------+--------+--------+---------+
| 1 | 3 | price | 10 | 30 | 2/1/16 |
+----+----+--------+--------+--------+---------+
| 2 | 4 | price | 20 | 30 | 2/1/16 |
+----+----+--------+--------+--------+---------+
| 3 | 4 | qty | 2 | 3 | 2/1/16 |
+----+----+--------+--------+--------+---------+
| 4 | 5 | qty | 1 | 2 | 3/1/16 |
+----+----+--------+--------+--------+---------+
| 5 | 6 | qty | 2 | 3 | 7/1/16 |
+----+----+--------+--------+--------+---------+
這是如何表現明智? – rickythefox
@rickythefox您可以嘗試兩種解決方案,並告訴我們他們如何執行您的實際數據。 –