Access - Problema en la seleccion de filas.

 
Vista:

Problema en la seleccion de filas.

Publicado por Miguel Angel Mora (8 intervenciones) el 11/12/2001 07:32:25
Muy buenas, tengo la siguiente consulta:

SELECT DISTINCTROW [articulo/articulo].ID, [compra/pedidoform].PedidoID, [compra/pedidoform].[pos-id], [compra/Pedido principal].[pedido-fecha], [compra/pedidoform].[arti-prc] FROM ([compra/pedidoform] INNER JOIN [articulo/articulo] ON [compra/pedidoform].articuloID = [articulo/articulo].ID) INNER JOIN [compra/Pedido principal] ON [compra/pedidoform].PedidoID = [compra/Pedido principal].ID WHERE ((([compra/pedidoform].PedidoID) Like ConvertNulls([Forms]![FORMULARIO RECIBIDOS]![PedidoID],"*"))) ORDER BY [compra/pedidoform].PedidoID, [compra/pedidoform].[pos-id] WITH OWNERACCESS OPTION;

el problema que tengo es que cuando tengo dos filas con dos articulos iguales
en el ejemplo de abajo la 1 y 3 siempre me toma la 1ª . . Imagino que hay algo mal en la consulta , pero no doy en el clavo.

fila 1--> articulo1 pedido1 pos1 fecha1 precio-articulo1-pos1
fila 2--> articulo2 pedido1 pos2 fecha1 precio-articulo2-pos2
fila 3--> articulo1 pedido1 pos3 fecha1 precio-articulo1-pos3

Gracias por anticipado y por leer este tocho.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema en la seleccion de filas.

Publicado por Alejandro (4142 intervenciones) el 19/04/2023 22:35:49
El problema en tu consulta es que estás utilizando la función DISTINCTROW en la selección, lo que hace que se muestren únicamente las filas distintas. Esto significa que, si hay varias filas con los mismos valores en las columnas seleccionadas, solo se mostrará una de ellas.

Para resolver este problema, puedes utilizar la función GROUP BY en lugar de DISTINCTROW. La función GROUP BY agrupa los registros según los valores de una o más columnas y permite realizar cálculos o funciones de agregación en los valores de las columnas agrupadas.

Aquí te muestro un ejemplo de cómo podrías modificar tu consulta para agrupar los registros por los campos de ID de artículo, PedidoID y pos-id, y sumar el precio de cada grupo de registros:

1
2
3
4
5
SELECT [articulo/articulo].ID, [compra/pedidoform].PedidoID, [compra/pedidoform].[pos-id], [compra/Pedido principal].[pedido-fecha], Sum([compra/pedidoform].[arti-prc]) AS PrecioTotal
FROM ([compra/pedidoform] INNER JOIN [articulo/articulo] ON [compra/pedidoform].articuloID = [articulo/articulo].ID) INNER JOIN [compra/Pedido principal] ON [compra/pedidoform].PedidoID = [compra/Pedido principal].ID
WHERE ((([compra/pedidoform].PedidoID) Like ConvertNulls([Forms]![FORMULARIO RECIBIDOS]![PedidoID],"*")))
GROUP BY [articulo/articulo].ID, [compra/pedidoform].PedidoID, [compra/pedidoform].[pos-id], [compra/Pedido principal].[pedido-fecha]
ORDER BY [compra/pedidoform].PedidoID, [compra/pedidoform].[pos-id] WITH OWNERACCESS OPTION;

En esta consulta, se agrupan los registros por ID de artículo, PedidoID y pos-id, y se calcula la suma de los precios de los registros de cada grupo mediante la función de agregación Sum. Los demás campos se mantienen en la selección y en el ordenamiento.

Espero que esto te ayude a resolver el problema de selección de filas en tu consulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar