Update-Abfrage mit Korrelierte Unterabfrage

Ich versuche zu konvertieren, eine Foxpro-Anwendung in .NET. Als Teil dieser Umstellung bin ich der Konvertierung der Daten aus DBF-Tabellen zum Sql-server.

Ich brauche zu kommen mit ein paar neue Felder in der Tabelle Customer auf die Tabelle Bestellungen basiert, FirstOrder und LastOrder.

Ich kann einfach nicht scheinen, um zu durchschlagen, wie dies in TSql. Ich weiß, wie ich es tun würde, in Foxpro, und ich konnte eigentlich immer noch tun, wenn ich musste, aber ich weiß, ich muss lernen, wie dies in Sql.

Hier ist die grundlegende Struktur.
Customer-Tabelle hat eine Id, dann die FirstOrder und LastOrder Felder brauche ich aktualisiert.
Order-Tabelle hat OrderDate, aber hier ist der real-Kurve. Die Kunden-Id vorhanden sein können in 5 verschiedenen Feldern innerhalb der Reihenfolge: ShipperId, PickupId, ConsigneeId, DeliveryId, oder BillingId.

So etwas wie:

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)

Kann einfach nicht scheinen, um herauszufinden, wie zu binden, die Unterabfrage mit den wichtigsten update-Abfrage.

Dank,
-Sid


BEARBEITEN:
Hier ist der SELECT-das ist arbeiten auf der Grundlage von MarkD Vorschlag:

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

So, jetzt nutze ich dies als eine Unterabfrage oder den cursor an die post zurück an den Kunden-Tabelle?

InformationsquelleAutor Omegaware | 2013-01-12

Schreibe einen Kommentar