ฉันจะใช้รูปธรรม แต่เป็นตัวอย่างสมมุติ
โดยปกติแล้วคำสั่งซื้อแต่ละรายการจะมีเพียงหนึ่งรายการ :
คำสั่งซื้อ:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
รายการโฆษณา:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
แต่บางครั้งจะมีคำสั่งซื้อที่มีรายการโฆษณาสองรายการ:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
โดยปกติเมื่อแสดงคำสั่งซื้อให้กับผู้ใช้:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
ฉันต้องการที่จะแสดงรายการเดียวในการสั่งซื้อ แต่กับการสั่งซื้อเป็นครั้งคราวนี้มีสอง (หรือมากกว่า) รายการสั่งซื้อที่จะปรากฏจะซ้ำกัน :
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
สิ่งที่ฉันต้องการจริงๆคือมี SQL Server เพียงเลือกอย่างใดอย่างหนึ่งเพราะจะดีพอ :
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
ถ้าฉันชอบผจญภัยฉันอาจแสดงผู้ใช้เป็นจุดไข่ปลาเพื่อระบุว่ามีมากกว่าหนึ่ง:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
ดังนั้นคำถามคือทำอย่างไร
- กำจัดแถว "ซ้ำ"
- เข้าร่วมกับหนึ่งในแถวเท่านั้นเพื่อหลีกเลี่ยงการทำซ้ำ
ความพยายามครั้งแรก
ความพยายามที่ไร้เดียงสาครั้งแรกของฉันคือการเข้าร่วมรายการโฆษณา" 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
แต่นั่นทำให้เกิดข้อผิดพลาด:
คอลัมน์หรือคำนำหน้า 'คำสั่งซื้อ' ไม่
ตรงกับชื่อตารางหรือชื่อนามแฝงที่
ใช้ในการสืบค้น
น่าจะเป็นเพราะตัวเลือกด้านในไม่เห็นตารางด้านนอก
group by
จะต้องมีรายชื่อคอลัมน์อื่น ๆ ทั้งหมดยกเว้นที่คุณไม่ต้องการให้ซ้ำกัน ที่มา
group by
ไม่ได้เหรอ