我有一个表格,其中包含colof like numberofCalls,Date,CallsNotRecieved等。
我需要一种方法来获得这个记录一个月,但在每个星期六结束时我必须显示一周的总数,毕竟我必须显示本月的总计。
它在SQL服务器中是否可行?任何帮助?
答案 0 :(得分:1)
您应该向我们提供有关数据结构的更多信息。假设您的[Date]
列的类型为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()
和{{1}对数据集进行排序}}
编辑:
在sql server 2005中,由于没有order by [Period]
,因此必须使用grouping sets
(或更糟 - WITH ROLLUP
)子句,然后使用WITH CUBE
<过滤掉不需要的分组组合/ p>