[英]SQL Server - Code for Updating values using inner query self join
這對大多數人來說可能是非常基本的,但我想得到一些幫助。
使用 SQL Server 我有以下訂單表(Excel 摘錄以簡化):
請注意有多個訂單 (OrderID)。 有些可能具有“PrimaryOrder”值,這意味着它們與現有的先前訂單相關。 相關訂單接收第一個相關訂單的“PrimaryOrder”,以及記錄它們進入的訂單的“OrderIndex”。只有每組中的第一個訂單具有價值。 如果訂單的“PrimaryOrder”為 NULL,則表示它是單個訂單,我應該忽略它。
我需要的是,使用 SQL Server Update 命令為所有相關訂單提供與其第一個相關訂單的“價值”相同的“價值”。 對於每個具有“OrderIndex”> 1 的訂單,將其值字段從 NULL 更新為“PrimaryOrder”值。 如果 "PrimaryOrder" = 1 OR 為 NULL,則忽略且不更新。
嘗試了一些簡單的 INNER JOIN 但迷路了。 我不認為它應該太復雜,但我可能想多了。
謝謝!
您可以將相關子查詢與update
語句一起使用:
update o
set o.value = (select top (1) o1.value
from Orders o1
where o1.primaryorder = o.primaryorder and
o1.value is not null and
o1.orderindex <= o.orderindex
order by o1.orderindex desc
)
from Orders o
where o.value is null;
也許是這樣的:
UPDATE #table
SET a.Value=b.Value
FROM #table a INNER JOIN #table b
on a.OrderID=b.PrimaryOrder and a.OrderIndex>1 and a.Value is NULL
UPDATE o
SET Value=MaxVals.MaxValue
FROM Orders o
INNER JOIN (
SELECT MAX(Value) AS MaxValue, PrimaryOrder
FROM Orders
WHERE PrimaryOrder IS NOT NULL
GROUP BY PrimaryOrder
) AS MaxVals ON MaxVals.PrimaryOrder=o.PrimaryOrder
WHERE o.Value IS NULL
謝謝你們。 設法從上述所有內容中獲取一些東西,這解決了它:
UPDATE O
SET O.[Value] = B.[Value]
FROM Orders O INNER JOIN Orders B
ON O.PrimaryOrder = B.[PrimaryOrder] and O.OrderIndex > 1 and O.[Value] is NULL
AND B.[OrderIndex] = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.