Somut ama varsayımsal bir örnek kullanacağım.
Her Sipariş'in normalde yalnızca bir satır öğesi vardır :
Emirler:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
Satır öğesi:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
Ancak bazen iki satır öğesi içeren bir sipariş olacaktır:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
Normalde siparişleri kullanıcıya gösterirken:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
Siparişte tek bir öğeyi göstermek istiyorum. Ama bu arada sipariş öğeleri ikisini içeren (veya daha fazla) ile, emir olurdu görünür olmak çoğaltılamaz :
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
Gerçekten istediğim, yeterince iyi olacağı için SQL Server sadece birini seçmektir :
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
Maceracı olursam, kullanıcıya gösterebilirim, birden fazla olduğunu gösteren bir üç nokta:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
Soru şu; ya
- "yinelenen" satırları yok et
- çoğaltmayı önlemek için yalnızca satırlardan birine katılın
İlk girişim
İlk naif girişimim sadece " TOP 1 " satır öğelerine katılmaktı :
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
Ama bu hatayı veriyor:
'Siparişler' sütunu veya öneki , sorguda kullanılan
tablo adıyla veya takma adla eşleşmiyor
.
Muhtemelen iç seçim dış tabloyu görmediği için.
group by
kopyaları istemediğiniz hariç, diğer tüm sütunları listelemek gerekir. Kaynak
group by
?