У меня есть таблица 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 строк)?