私は私が必要なものをやってに近いクエリを持っている:MSSQL - 各月を4週間にどのように分割するのですか?
select *
from
(
select DATEPART (YEAR, order_date) as theYear,
DATEPART (WEEK, order_date) as theWeek,
SUM (order_totalPrice) as totalSales
from orders_tbl
where order_date >= '01/01/2015'
group by DATEPART (YEAR, order_date), DATEPART (WEEK, order_date)
) as mySourceTable
pivot
(
sum (totalSales)
for theYear in ([2015], [2016], [2017])
) as myPivotTable
order by theWeek asc
これは次のように結果を与える:
Week 2015 2016 2017
----------------------------
1 $999 $999 $999
2 $999 $999 $999
3 $999 $999 $999
しかし、これは、特定の日に始まる7日であるとして「数週間」を定義その週の。 (私は月曜日がデフォルトだと思う)。
Day of Month Week #
-----------------------
1-7 1
8-14 2
15-21 3
22+ 4
そして、私の最終的な出力は次のようになります:
私は本当に何をしたいのかは、4週間後に毎月分割私は年間48「週」を持っているだろうというように、このようなものです
Month Week 2015 2016 2017
----------------------------------------
1 1 $999 $999 $999
1 2 $999 $999 $999
1 3 $999 $999 $999
1 4 $999 $999 $999
2 1 $999 $999 $999
2 2 $999 $999 $999
私はこれが最もビジネス上の意味を持つため、これを実行したいと考えています。
これを達成するために上記のクエリを変更するにはどうすればよいですか?
規定1:これは、Webアプリケーションコード内から呼び出すクエリです(このため、これはT-SQLのいくつかの事項を除外していると思います...)?はい、Webアプリケーションコードを使用してさまざまなループやその他の操作を行いますが、純粋に単一のSQLクエリでこれを行う方法はありますか?
規定2:私はMS SQL 2008 R2を使用しています。
!それは私が探している正確な結果を与える。 2つのフォローアップ質問:
1)SELECTとGROUP BYの両方でCASEを使用する必要がありますか? (これはMS SQLで必要とされているからです) 2)パフォーマンスを向上させるためにこのクエリを最適化する方法はありますか? –