3

我有一个表,其中包含 numberofCalls、Date、CallsNotRecieved 等列。

我需要一种方法来获取一个月的记录,但是在每个星期六结束时,我必须显示一周的总计,毕竟我必须显示本月的总计。

在 SQL Server 中是否可行?有什么帮助吗?

4

1 回答 1

1

您应该向我们提供有关数据结构的更多信息。假设您的[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

于 2013-06-14T09:26:35.337 回答