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行に制限されます)。