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 |
+----------+------------+--------------+
各週の合計販売額(最初の表の各startDate
とendDate
の間にある)を表示するクエリを作成するにはどうすればよいですか? WHERE句で再帰クエリを使用して、日付がstartDate
とendDate
の間にあるかどうかを確認する必要があると思いますが、実際の例は見つかりません。ここで
は(startDate
とendDate
は、最初の表から記録である)私の期待した結果、次のとおりです。
+------------+------------+--------------+
| 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 |
+------------+------------+--------------+
ありがとうございました!
変化から欠落している日付を表示したい場合は、左結合を使用することができます'sum(Sales)'と 'sum(sales_amount)'は完全に動作します!ありがとうございました! – wesley
@wesley助けて嬉しいです。私の監督を訂正してくれてありがとう。 –