Tôi sẽ sử dụng một ví dụ cụ thể, nhưng giả thuyết.
Mỗi đơn hàng thường chỉ có một mục hàng :
Đơn đặt hàng:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
Mục hàng:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
Nhưng đôi khi sẽ có một đơn hàng với hai chi tiết đơn hàng:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
Thông thường khi hiển thị các đơn đặt hàng cho người dùng:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
Tôi muốn hiển thị các mục duy nhất trên đơn đặt hàng. Nhưng với trật tự thỉnh thoảng này chứa hai (hoặc nhiều hơn) các mặt hàng, các đơn đặt hàng sẽ xuất hiện được nhân đôi :
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
Điều tôi thực sự muốn là có SQL Server chỉ cần chọn một , vì nó sẽ đủ tốt :
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
Nếu tôi thích phiêu lưu, tôi có thể chỉ cho người dùng, dấu chấm lửng để chỉ ra rằng có nhiều hơn một:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
Vì vậy, câu hỏi là làm thế nào để
- loại bỏ các hàng "trùng lặp"
- chỉ tham gia vào một trong các hàng để tránh trùng lặp
Lần thử đầu tiên
Nỗ lực ngây thơ đầu tiên của tôi là chỉ tham gia vào các chi tiết đơn hàng " 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
Nhưng điều đó mang lại lỗi:
Cột hoặc tiền tố 'Đơn hàng' không
khớp với tên bảng hoặc tên bí danh
được sử dụng trong truy vấn.
Có lẽ bởi vì lựa chọn bên trong không nhìn thấy bảng bên ngoài.
group by
sẽ yêu cầu liệt kê tất cả các cột khác, ngoại trừ cột mà bạn không muốn trùng lặp. Nguồn
group by
?