Wykorzystam konkretny, ale hipotetyczny przykład.
Każde zamówienie ma zwykle tylko jeden element zamówienia :
Zamówienia:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
LineItems:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
Ale czasami będzie zamówienie z dwoma elementami:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
Zwykle podczas wyświetlania zamówień użytkownikowi:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
Chcę pokazać pojedynczy element na zamówieniu. Ale z tego okazjonalne zamówienie zawierające dwa (lub więcej) elementów, zamówienia będą pojawiać być powielany :
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
Naprawdę chcę, aby SQL Server wybrał jeden , ponieważ będzie wystarczająco dobry :
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
Jeśli zacznę przygodę, mogę pokazać użytkownikowi elipsę, która wskazuje, że jest więcej niż jeden:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
Pytanie brzmi: jak to zrobić?
- wyeliminuj „zduplikowane” wiersze
- dołącz tylko do jednego z wierszy, aby uniknąć powielania
Pierwsze podejscie
Moja pierwsza naiwna próba polegała na dołączeniu tylko do elementów zamówienia „ TOP 1 ”:
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
Ale to daje błąd:
Kolumna lub przedrostek „Zamówienia” nie są
zgodne z nazwą tabeli lub nazwą aliasu
użytą w zapytaniu.
Prawdopodobnie dlatego, że wewnętrzny wybór nie widzi tabeli zewnętrznej.
group by
wymagałoby wyszczególnienia wszystkich pozostałych kolumn, z wyjątkiem tej, w której nie chcesz duplikatów. Źródło
group by
?