Ich möchte ein konkretes, aber hypothetisches Beispiel anführen.
Jede Bestellung hat normalerweise nur einen Einzelposten :
Bestellungen:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
Einzelposten:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
Gelegentlich kommt es jedoch vor, dass ein Auftrag zwei Positionen enthält:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
Normalerweise, wenn die Bestellungen dem Benutzer angezeigt werden:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
Ich möchte den einzelnen Artikel auf der Bestellung anzeigen. Aber mit dieser gelegentlichen Bestellung, die zwei (oder mehr) Artikel enthält, würden die Bestellungen erscheinen sein vervielfältigt :
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 spurving bearing
KSG-0619-81 5 panametric fan
KSG-0619-81 5 differential girdlespring
Was ich wirklich möchte, ist, dass SQL Server Wählen Sie einfach einen aus wie es sein wird gut genug :
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
Wenn ich abenteuerlustig bin, könnte ich dem Benutzer eine Ellipse zeigen, um anzuzeigen, dass es mehr als eine gibt:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
Die Frage ist also, wie man entweder
- Beseitigung "doppelter" Zeilen
- nur mit einer der Zeilen verknüpfen, um Doppelungen zu vermeiden
Erster Versuch
Mein erster naiver Versuch bestand darin, sich nur mit dem " TOP 1 Einzelposten":
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN (
SELECT TOP 1 LineItems.Quantity, LineItems.Description
FROM LineItems
WHERE LineItems.OrderID = Orders.OrderID) LineItems2
ON 1=1
Aber das führt zu dem Fehler:
Die Spalte oder das Präfix 'Orders' bedeutet nicht
Übereinstimmung mit einem Tabellennamen oder einem Aliasnamen
in der Abfrage verwendet.
Vermutlich, weil der innere Select die äußere Tabelle nicht sieht.
4 Stimmen
Können Sie nicht
group by
?4 Stimmen
Ich denke (und korrigieren Sie mich, wenn ich falsch liege)
group by
müssten alle anderen Spalten aufgelistet werden, mit Ausnahme derjenigen, in der Sie keine Duplikate haben wollen. Quelle