我有一个表,其中包含 numberofCalls、Date、CallsNotRecieved 等列。
我需要一种方法来获取一个月的记录,但是在每个星期六结束时,我必须显示一周的总计,毕竟我必须显示本月的总计。
在 SQL Server 中是否可行?有什么帮助吗?
我有一个表,其中包含 numberofCalls、Date、CallsNotRecieved 等列。
我需要一种方法来获取一个月的记录,但是在每个星期六结束时,我必须显示一周的总计,毕竟我必须显示本月的总计。
在 SQL Server 中是否可行?有什么帮助吗?
您应该向我们提供有关数据结构的更多信息。假设您的[Date]
列是 type datetime
,并且您希望将所有日期/周总计/月总计放在一列中:
set datefirst 7
select
case
when grouping(cast(datepart(week, [Date]) as varchar(255)))=1 then '<monthtotal>'
when grouping(cast([Date] as date))=1 then '<weektotal>'
else cast(cast([Date] as date) as varchar(255))
end as Period
,CallsNotRecieved = sum(CallsNotRecieved)
,NumberOfCalls = sum(numberofCalls)
from <yourtable>
group by
grouping sets(
(cast(datepart(month, [Date]) as varchar(255)), cast(datepart(week, [Date]) as varchar(255)),cast([Date] as date)),
(cast(datepart(month, [Date]) as varchar(255)), cast(datepart(week, [Date]) as varchar(255))),
(cast(datepart(month, [Date]) as varchar(255)))
)
您可以弄清楚如何在没有 的情况下执行此操作set datefirst
,插入周/月数而不是 weektotal 和 monthtotal,并确保数据集使用order by grouping()
, 和order by [Period]
编辑:在 sql server 2005 中,由于没有grouping sets
,因此必须使用WITH ROLLUP
(或更糟 - WITH CUBE
)子句,然后过滤掉不需要的分组组合grouping(<column_name>)=1