Tengo una tabla de SQL 2005, vamos a llamarlo Órdenes, en el formato:SQL por día, muestran pedidos de cada día
OrderID, OrderDate, OrderAmount
1, 25/11/2008, 10
2, 25/11/2008, 2
3, 30/1002008, 5
entonces necesito para producir una tabla de informe que muestra la cantidad ordenada en cada días en los últimos 7 días:
Day, OrderCount, OrderAmount
25/11/2008, 2, 12
26/11/2008, 0, 0
27/11/2008, 0, 0
28/11/2008, 0, 0
29/11/2008, 0, 0
30/11/2008, 1, 5
La consulta SQL que normalmente produciría esto:
select count(*), sum(OrderAmount)
from Orders
where OrderDate>getdate()-7
group by datepart(day,OrderDate)
tiene un problema en que se saltará los días en que no hay órdenes:
Day, OrderCount, OrderAmount
25/11/2008, 2, 12
30/11/2008, 1, 5
Normalmente habría solucionar este problema utilizando una tabla de conteo y la combinación externa contra filas allí, pero estoy realmente en busca de una solución más simple o más eficiente para este . Parece un requisito tan común para una consulta de informe que alguna solución elegante ya debería estar disponible para esto.
Entonces: 1. ¿Se puede obtener este resultado de una consulta simple sin usar tablas de conteo?
y 2. Si no, ¿podemos crear esta tabla de conteo (confiablemente) sobre la marcha (puedo crear una tabla de conteo usando CTE pero la pila de recursión me limita a 100 filas)?
Su ejemplo SELECT omite la información de fecha. –
SQL grupo por día, escuadrón de lucha contra el crimen por la noche –
Este enlace contiene información completa sobre la agrupación de datos por día - día del mes - día de la semana - día del año en detalle con exaples. http://sqlserverlearner.com/2012/group-by-day-with-examples –