SQL为每周和最后添加总和行添加总计

时间:2013-06-14 06:25:33

标签: sql-server-2008

我有一个表格,其中包含colof like numberofCalls,Date,CallsNotRecieved等。

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

它在SQL服务器中是否可行?任何帮助?

1 个答案:

答案 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>