我試圖將Foxpro應用程序轉換爲.NET。作爲轉換的一部分,我將數據從DBF錶轉換爲Sql服務器。使用相關子查詢更新查詢
我需要基於訂單表,FirstOrder和LastOrder在Customer表中創建一對新字段。
我似乎無法彌補如何在TSql中做到這一點。我知道如何在Foxpro中做到這一點,如果必須,我仍然可以在那裏做,但我知道我需要學習如何在Sql中執行此操作。
這裏是基本結構。 客戶表有一個ID,那麼我需要更新的FirstOrder和LastOrder字段。訂單表有OrderDate,但這裏是實際的曲線。客戶ID可存在於訂單內的5個不同字段中:ShipperId,PickupId,ConsigneeId,DeliveryId或BillingId。
因此,像:
UPDATE customers
SET FirstOrderDate =
(Select MIN(OrderDate)
FROM Orders o
WHERE o.ShipperId = Customers.Id or
o.PickupId = Customers.Id or
o.ConsigneeId = Customers.Id or
o.DeliveryId = Customers.Id or
o.BillingId = Customers.Id)
似乎無法找出如何與主更新查詢扎子查詢。
感謝, -sid
編輯: 下面是的工作基礎上MarkD的建議的SELECT:
Select C.Id,Min(o.OrderDate) as firstorder, MAX(o.OrderDate) as lastorder
from Customers C
JOIN Orders o
on o.ShipperId = C.Id or
o.PickupId = C.Id or
o.ConsigneeId = C.Id or
o.DeliveryId = C.Id or
o.BillingId = C.Id
GROUP BY C.Id
所以現在我用這個作爲一個子查詢或光標後回客戶表?
SQL Server不喜歡在set命令的聚合函數。它可以作爲SELECT使用,我可以獲取我正在查找的數據,所以我應該使用該答案並嘗試將其用作子查詢或遊標,然後將更新運行到Customers? – Omegaware
作出更改,請讓我知道... – MarkD
馬克 - 感謝您的建議。我在尋找訂單的最小或最大日期是基於Customer.Id。此Id可以存在於5個Order Id字段中的任何一箇中。您的分組依據的是所有ID,因此MinOrderDate會爲所有5個ID的組合返回一個最小OrderDate。場景是客戶123可以是託運人,也可以是皮卡,也可以是收貨人,交貨或結算客戶。我不在乎哪一個,我只是想要客戶123參與的第一個訂單。 – Omegaware