У меня есть таблица SQL 2005, назовем ее Orders, в формате:
OrderID, OrderDate, OrderAmount
1, 25/11/2008, 10
2, 25/11/2008, 2
3, 30/1002008, 5
Затем мне нужно создать таблицу отчета, показывающую заказанную сумму за каждый день за последние 7 дней:
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
SQL-запрос, который обычно выдает это:
select count(*), sum(OrderAmount)
from Orders
where OrderDate>getdate()-7
group by datepart(day,OrderDate)
Проблема в том, что он пропустит дни, когда нет заказов:
Day, OrderCount, OrderAmount
25/11/2008, 2, 12
30/11/2008, 1, 5
Обычно я бы исправил это, используя таблицу подсчета и внешнее объединение строк там, но я действительно ищу более простое или более эффективное решение для этого. Кажется, что такое общее требование для запроса отчета, что какое-то элегантное решение уже должно быть доступно для этого.
Итак: 1. Может ли этот результат быть получен из простого запроса без использования счетных таблиц?
и 2. Если нет, можем ли мы создать эту таблицу подсчета (надежно) на лету (я могу создать таблицу подсчета, используя CTE, но стек рекурсии ограничивает меня до 100 строк)?