Usaré un ejemplo concreto pero hipotético.
Cada pedido normalmente tiene solo una línea de pedido :
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 líneas de pedido:
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 artículo único en el pedido. Sin embargo, con este orden de vez en cuando, con dos (o más) elementos, las órdenes se parecen ser duplicada :
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 que SQL Server solo elija uno , ya que será lo 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 una elipsis 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, ...
Entonces la pregunta es cómo
- eliminar filas "duplicadas"
- solo unirse a una de las filas, para evitar duplicaciones
Primer intento
Mi primer intento ingenuo fue unirme solo a las líneas de pedido " 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
Pero eso da el error:
La columna o 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.
fuente
group by
?group by
requeriría enumerar todas las otras columnas, excluyendo la que no desea duplicados. Fuente