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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl ich denke, dass die
JOIN
Kriterien ist höchst unwahrscheinlich, es sieht aus wie Sie versuchen, dies zu tun?EDIT: hab ich geändert, die
JOIN
Kriterien, aber das ist, was Sie suchen.Grouping By
SpaltenOR
'd ist ungerade.Dies ist, was deine Abfrage Aussehen würde mit der
OR
sEDIT: Aber ich bin eine harte Zeit der Suche nach Schuld mit Ihre geposteten syntax.
Änderungen, plz lass es mich wissen...
- Mark - vielen Dank für die Anregungen. Die min-oder max-Datum ich bin auf der Suche nach aus den Bestellungen auf der Grundlage der Kunden.Id. Diese Id kann es in jeder der 5 Bestell-Id-Felder. Ihre Gruppe ist auf der Basis aller Id ' s, damit die MinOrderDate gibt eine min Bestelldatum für die Kombination von allen 5 Id. Das Szenario ist Kunde 123 kann ein transportkunde oder ein pickup oder ein Empfänger oder eine Lieferung, oder eine Rechnungs-Kunden. Ich interessiere mich nicht, welches, ich möchte nur die erste Bestellung, wenn der Kunde 123 beteiligt war.
Mark, du hattest Recht. Mein post hatte die richtige syntax! Aus irgendeinem Grund, wenn ich versuche, führen Sie es in das Abfragefenster ein, ich hatte einen Tippfehler. Das ist das problem wenn man nicht Vertrauen in Ihr Verständnis von der syntax!!!! Gut, ich muss etwas zu lernen. Nun, das einzige Problem ist, dass es dauert mehr als eine minute laufen, bei denen die select-Anweisung in ein paar Sekunden. Scheint, wie Sie versuchen zu übernehmen auswählen und dann ein update könnte schneller sein. Nochmals vielen Dank für die Hilfe!
Sehr seltsame Anfrage 🙂 Sorry ich konnte nicht mehr hilfreich. Viel Glück!
InformationsquelleAutor MarkD
Versuchen, diese
InformationsquelleAutor SHRI