Sql server 2008 SQL添加一周的总和行,并在末尾添加总计

Sql server 2008 SQL添加一周的总和行,并在末尾添加总计,sql-server-2008,Sql Server 2008,我有一个表,其中有numberofCalls、Date、CallsNotRecieved等列 我需要一种方法来获得一个月的记录,但在每个周六结束时,我必须显示一周的总数,毕竟我必须显示一个月的总数 它在SQL server中是否可行?有什么帮助吗?您应该给我们提供更多关于数据结构的信息。假设您的[Date]列的类型为datetime,并且您希望所有日期/周总数/月总数都在一列中: set datefirst 7 select case when grouping(c

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

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


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

您应该给我们提供更多关于数据结构的信息。假设您的
[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 7
挑选
案例
当分组(cast(datepart(week,[Date])为varchar(255))=1时,则“”
分组时(转换([日期]为日期))=1,则“”
else转换(转换([日期]为日期)为varchar(255))
作为期间结束
,CallsNotRecieved=sum(CallsNotRecieved)
,NumberOfCalls=总和(NumberOfCalls)
从…起
分组
分组集(
(将日期部分(月,[日期])转换为varchar(255)),将日期部分(周,[日期])转换为varchar(255)),将日期部分(日期]转换为varchar(255)),
(cast(datepart(月,[Date])为varchar(255)),cast(datepart(周,[Date])为varchar(255)),
(转换为varchar(255))(日期部分(月,[日期])
)
您可以了解如何在不使用
设置日期优先的情况下执行此操作,插入周/月数而不是周总数和月总数,还可以使用
按分组排序()
按[期间]排序来确保数据集的顺序。

编辑:
在sql server 2005中,由于没有
分组集
,因此必须使用
WITH ROLLUP
(或者更糟的是
WITH CUBE
)子句,然后使用
grouping()=1

筛选出不需要的分组组合,在月初/月底对部分周应该做什么?是的,必须对部分周进行合计。在月初的星期六给出正常运行的总数,在月底给出剩余天数的总数。让我说到星期四。谢谢你的回答,我刚刚解决了我的问题。谢谢您的指导。@frikozoid它在SQL server 2008和SQL server 2012中运行良好,但在服务器上安装了SQL server 2005。我们如何才能让它在SQLServer2005中工作。焦急地等待您的答复。@user1796443由于分组集是在2008年引入的(顺便说一句,您用sql-server-2008标记了您的问题),显然您不能使用分组集。请参见编辑。