2016-10-25 7 views
1

私のタイトルが特定/明確でない場合はまず第一に私を修正してください。SQL Server:WHERE句でCTEの変数値を使用する方法は?

私は、開始日と終了日を生成するには、次のコードを使用しています

以下
DECLARE @start_date date, @end_date date; 
SET @start_date = '2016-07-01'; 

with dates as 
(
    select 
     @start_date AS startDate, 
     DATEADD(DAY, 6, @start_date) AS endDate 

    union all 

    select 
     DATEADD(DAY, 7, startDate) AS startDate, 
     DATEADD(DAY, 7, endDate) AS endDate 
    from  
     dates 
    where 
     startDate < '2017-03-31' 
) 
select * from dates 

は、クエリ上からの出力の一部です:

+------------+------------+ 
| startDate | endDate | 
+------------+------------+ 
| 2016-07-01 | 2016-07-07 | 
| 2016-07-08 | 2016-07-14 | 
| 2016-07-15 | 2016-07-21 | 
| 2016-07-22 | 2016-07-28 | 
| 2016-07-29 | 2016-08-04 | 
+------------+------------+ 

は今、私は別のテーブルを持っていますsalesという3つの列、sales_id,sales_dateおよびsales_amountを以下のように有する:

+----------+------------+--------------+ 
| sales_ID | sales_date | sales_amount | 
+----------+------------+--------------+ 
| 1  | 2016-07-04 | 10   | 
| 2  | 2016-07-06 | 20   | 
| 3  | 2016-07-13 | 30   | 
| 4  | 2016-07-19 | 15   | 
| 5  | 2016-07-21 | 20   | 
| 6  | 2016-07-25 | 25   | 
| 7  | 2016-07-26 | 40   | 
| 8  | 2016-07-29 | 20   | 
| 9  | 2016-08-01 | 30   | 
| 10  | 2016-08-02 | 30   | 
| 11  | 2016-08-03 | 40   | 
+----------+------------+--------------+ 

各週の合計販売額(最初の表の各startDateendDateの間にある)を表示するクエリを作成するにはどうすればよいですか? WHERE句で再帰クエリを使用して、日付がstartDateendDateの間にあるかどうかを確認する必要があると思いますが、実際の例は見つかりません。ここで

は(startDateendDateは、最初の表から記録である)私の期待した結果、次のとおりです。

+------------+------------+--------------+ 
| startDate | endDate | sales_amount | 
+------------+------------+--------------+ 
| 2016-07-01 | 2016-07-07 | 30   | 
| 2016-07-08 | 2016-07-14 | 30   | 
| 2016-07-15 | 2016-07-21 | 35   | 
| 2016-07-22 | 2016-07-28 | 65   | 
| 2016-07-29 | 2016-08-04 | 120   | 
+------------+------------+--------------+ 

ありがとうございました!

答えて

1

(CTE後の)最終的な選択この

Select D.* 
     ,Sales_Amount = sum(Sales) 
From dates D 
Join Sales S on (S.sales_date between D.startDate and D.endDate) 
Group By D.startDate,D.endDate 
Order By D.startDate 

EDITのようなものでなければなりません:あなたは 販売

+0

変化から欠落している日付を表示したい場合は、左結合を使用することができます'sum(Sales)'と 'sum(sales_amount)'は完全に動作します!ありがとうございました! – wesley

+0

@wesley助けて嬉しいです。私の監督を訂正してくれてありがとう。 –

関連する問題