Problema
Queremos crear un total acumulado de una columna en función de otra. En nuestro ejemplo calcularemos un total acumulado de los precios en función de categoría. Es decir empezará a sumar desde cero al cambiar de categoría. Por tanto el total al iniciar la categoría es igual al precio de esa fila.
Solución
Empleamos una consulta que incluye una subconsulta.
SELECT T1.IdCategoría, T1.NombreProducto, T1.IdProducto, T1.PrecioUnidad, (SELECT Sum(T2.PrecioUnidad) FROM Productos AS T2 WHERE T2.IdCategoría = T1.IdCategoría AND T2.IdProducto <= T1.IdProducto) AS Total_Categoría FROM Productos AS T1
Resultado
El resultado saldrá desordenado.
Será necesario ordenar el resultado de la consulta primero por el Total_Categoría y luego por Categoría. Otra opción es utilizar el siguiente código.
SELECT * FROM (SELECT T1.IdCategoría, T1.NombreProducto, T1.IdProducto, T1.PrecioUnidad, (SELECT Sum(Productos.PrecioUnidad) AS Total FROM Productos WHERE Productos.IdCategoría = T1.IdCategoría AND Productos.IdProducto <= T1.IdProducto ) AS Total FROM Productos AS T1) AS T2 ORDER BY T2.IdCategoría, Total;
No hay comentarios:
Publicar un comentario