SQL Server: Cómo unirse a la primera fila
Usaré un ejemplo concreto, pero hipotético.
CadaOrden normalmente tiene una solaElemento en linea:
Pedidos:
OrderGUID OrderNumber
========= ============
{FFB2...} STL-7442-1
{3EC6...} MPT-9931-8A
Artículos de línea:
LineItemGUID Order ID Quantity Description
============ ======== ======== =================================
{098FBE3...} 1 7 prefabulated amulite
{1609B09...} 2 32 spurving bearing
Pero ocasionalmente habrá un pedido con dos artículos de línea:
LineItemID Order ID Quantity Description
========== ======== ======== =================================
{A58A1...} 6,784,329 5 pentametric fan
{0E9BC...} 6,784,329 5 differential girdlespring
Normalmente al mostrar los pedidos al usuario:
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
INNER JOIN LineItems
ON Orders.OrderID = LineItems.OrderID
Quiero mostrar el único artículo en el pedido. Pero con este pedido ocasional que contiene dos (o más) artículos, los pedidosAparecer serduplicado:
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
Lo que realmente quiero es tener SQL Serversolo elige unocomo serásuficientemente bueno:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan
Si me vuelvo aventurero, podría mostrarle al usuario, puntos suspensivos para indicar que hay más de uno:
OrderNumber Quantity Description
=========== ======== ====================
STL-7442-1 7 prefabulated amulite
MPT-9931-8A 32 differential girdlespring
KSG-0619-81 5 panametric fan, ...
Así que la pregunta es cómo
eliminar filas "duplicadas"solo unirse a una de las filas, para evitar la duplicaciónPrimer intentoMi primer intento ingenuo fue unirme solo al "TOP 1" artículos de línea:
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
Pero eso da el error:
La columna o el prefijo 'Pedidos' no
coincide con un nombre de tabla o nombre de alias
utilizado en la consulta.
Presumiblemente porque la selección interna no ve la tabla externa.