我有以下值的測驗表(1)

但是我有一個名為 table(2) 的表的更新:

如您所見,table(2) 與 table(1) 類似,但它具有每個 ID 的新值和新日期。我應該如何使用 update 命令根據 table2 的新值更新 table1
uj5u.com熱心網友回復:
在 sql 中,通過合并函式執行此操作的最快方法是,它將新行添加到 table2 中存在的 table1 而不是 table1 中。
merge into table1 t1
using table2 t2
on t1.id = t2.id
and t1.date = t2.date
when not matched then
insert (t1.id, t1.date, t1.value1, t1.value2 , t1.value3, t1.value4)
values (t2.id, t2.date, t2.value1, t2.value2 , t2.value3, t2.value4)
uj5u.com熱心網友回復:
我從您的問題中了解到,您在 table2 中的每個 id 都有多個記錄,并且您希望將基于資料的最新行的值更新到 table1。在這種情況下,您可以嘗試使用 aROW_NUMBER或RANK函式,就像這樣
;WITH CTE
AS
(
SELECT
RN = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Date DESC),
id,
date,
val1,
val2,
val3
FROM Table2
)
UPDATE T1
SET
Val1 = T2.Val1
Val2 = T2.Val2
FROM Table1 T1
INNER JOIN CTE T2
ON T1.id = T2.id
WHERE T2.RN = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340091.html
標籤:sql sql-server 查询语句
上一篇:MSSQL中的移動平均線?
下一篇:批量匯入xml檔案到SQL服務器
