Saya akan menggunakan contoh konkret, tetapi hipotetis.
Setiap pesanan biasanya hanya memiliki satu item baris :
Pesanan:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
Item Baris:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
Tetapi kadang-kadang akan ada pesanan dengan dua item baris:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
Biasanya ketika menampilkan pesanan kepada pengguna:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
Saya ingin menunjukkan satu item pada pesanan. Tapi dengan pesanan sesekali ini mengandung dua (atau lebih) item, perintah akan muncul akan digandakan :
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
Yang benar-benar saya inginkan adalah memiliki SQL Server hanya memilih satu , karena akan cukup baik :
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
Jika saya suka bertualang, saya mungkin menunjukkan kepada pengguna, sebuah elipsis untuk menunjukkan bahwa ada lebih dari satu:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
Jadi pertanyaannya adalah bagaimana caranya
- menghilangkan baris "duplikat"
- hanya bergabung ke salah satu baris, untuk menghindari duplikasi
Percobaan pertama
Upaya naif pertama saya adalah hanya bergabung dengan item baris " 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
Tapi itu memberi kesalahan:
Kolom atau awalan 'Pesanan' tidak
cocok dengan nama tabel atau nama alias yang
digunakan dalam kueri.
Agaknya karena seleksi dalam tidak melihat tabel luar.
group by
akan membutuhkan daftar semua kolom lainnya, kecuali kolom yang tidak Anda inginkan duplikatnya. Sumber
group by
?