簡體   English   中英

SQL Server - 使用內部查詢自聯接更新值的代碼

[英]SQL Server - Code for Updating values using inner query self join

這對大多數人來說可能是非常基本的,但我想得到一些幫助。

使用 SQL Server 我有以下訂單表(Excel 摘錄以簡化):

簡化的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM