我正在尝试将 Foxpro 应用程序转换为 .NET。作为该转换的一部分,我将数据从 DBF 表转换为 Sql 服务器。
我需要根据 Orders 表 FirstOrder 和 LastOrder 在 Customer 表中提出几个新字段。
我似乎无法在 TSql 中搞清楚如何做到这一点。我知道我会如何在 Foxpro 中做到这一点,如果必须的话,我实际上仍然可以在那里做到,但我知道我需要学习如何在 Sql 中做到这一点。
这里是基本结构。客户表有一个 Id,然后是我需要更新的 FirstOrder 和 LastOrder 字段。Order Table 有 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)
只是似乎无法找出如何将子查询与主更新查询联系起来。
谢谢,-席德
编辑:这是根据 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
那么现在我应该将其用作子查询或游标来回发到客户表吗?