Access - Consulta Complicada

 
Vista:

Consulta Complicada

Publicado por Anibal (6 intervenciones) el 23/03/2006 16:02:48
Quiero resolver mediante un consulta sql la sig situación.

Tengo que generar un informe atado a una consulta que sea capaz de agrupar cada 15 registros y que la suma total de (cantidad * importe) no supere los $ 20

Tabla.
Articulo Descripción Importe Cantidad
1 Tornillos $ 1 5
1 Tornillos $ 1 8
1 Tornillos $ 1 13
2 Tuercas $ 1.50 4.50
3 Arandelas $ 1.30 4
4 Precintos $ 1.20 10
5 mangueras$ 3.30 15
Ect Ect Ect Ect

• Esta es la instrucción SQL que tengo hasta el momento.
SELECT TOP 15 Codigo, Descripcion, Categoria, Sum(Cantidad) AS SumaCant, Importe, Sum(Cantidad * Importe ) AS Subtotal
FROM Movimientos
GROUP BY Codigo, Descripcion, Categoria, Importe;

• Esto es lo que devuelve
1 Tornillos $ 1 13 26
2 Tuercas $ 1.50 3 4.50
3 Arandelas $ 1.30 4 5.2
4 Precintos $ 1.20 10 12
5 mangueras$ 3.30 15 49.5

• Esto es lo que necesito que devuelva la query
1 Tornillos $ 1 13 20
1 Tornillos $ 1 13 6
2 Tuercas $ 1.50 3 4.50
3 Arandelas $ 1.30 4 5.2
4 Precintos $ 1.20 10 12
5 mangueras$ 3.30 15 20
5 mangueras$ 3.30 15 19.5
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

Agrupar registros cada 15 y limitar la suma total en una consulta SQL

Publicado por Alejandro (4142 intervenciones) el 17/07/2023 22:21:48
Para lograr el resultado deseado en tu consulta SQL en Access, puedes utilizar una combinación de subconsultas y funciones de agregado condicionales. Aquí tienes una solución que puedes aplicar a esta y futuras consultas similares:

1
2
3
4
5
6
7
8
9
SELECT Codigo, Descripcion, Categoria, Cantidad, Importe,
    IIf(SumaAcumulada > 20, Cantidad - (SumaAcumulada - 20), Cantidad) AS CantidadAjustada,
    IIf(SumaAcumulada > 20, (Cantidad - (SumaAcumulada - 20)) * Importe, Cantidad * Importe) AS Subtotal
FROM (
    SELECT Codigo, Descripcion, Categoria, Cantidad, Importe,
        (SELECT SUM(Cantidad) FROM Movimientos AS M2 WHERE M2.Codigo = M1.Codigo AND M2.Descripcion = M1.Descripcion AND M2.Importe = M1.Importe AND M2.ID <= M1.ID) AS SumaAcumulada
    FROM Movimientos AS M1
) AS T
ORDER BY Codigo, Descripcion, Categoria, ID;

En esta consulta, se utiliza una subconsulta para calcular la suma acumulada de la cantidad para cada combinación de Código, Descripción y Importe hasta el registro actual. Luego, se aplica una lógica condicional para ajustar la cantidad y el subtotal en caso de que la suma acumulada supere los $20. El resultado final se ordena por Código, Descripción, Categoria y ID para mantener el orden original de los registros.

Recuerda reemplazar "Movimientos" con el nombre real de tu tabla.

Con esta solución, la consulta devolverá los registros agrupados cada 15, asegurándose de que la suma total de (cantidad * importe) no supere los $20. La columna "CantidadAjustada" muestra la cantidad ajustada en caso de que la suma acumulada supere los $20.

Espero que esta solución te sea útil para resolver esta consulta y futuras consultas similares en Access. ¡Saludos, Aníbal!
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