【发布时间】:2017-06-23 20:22:39
【问题描述】:
我有一个接近于我需要的查询:
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 天。 (我认为星期一是默认的)。
我真正想做的是将每个月分成 4 周,这样我每年就有 48 个“周”,如下所示:
Day of Month Week #
-----------------------
1-7 1
8-14 2
15-21 3
22+ 4
我的最终输出如下所示:
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。
【问题讨论】:
标签: sql-server-2008 pivot week-number datepart