590
社区成员
发帖
与我相关
我的任务
分享
Declare @t table (Center varchar(50),DepartName varchar(50) ,State varchar(50))
insert into @t
Select '营销中心','营销中心一部','中标' Union All
Select '营销中心','营销中心二部','中标' Union All
Select '设计研究院','设计一部','中标' Union All
Select '设计研究院','设计一部','合同'
想要显示的效果
DepartName 中标 合同
营销中心一部 1 0
营销中心二部 1 0
营销中心 小计: 2 0
设计一部 1 1
设计研究院小计:1 1
合计: 3 1
having not (GROUPING(center)=1 and GROUPING(departname)=0)
having not (GROUPING(center)=1 and GROUPING(departname)=0)
[/quote]
grouping的值是由with cube这个选项来生成的,具体的你可以看看下面这个链接中的描述和例子。
http://www.cnblogs.com/nikyxxx/archive/2012/11/27/2791001.htmlwith t1(Center, DepartName, State) as
(
Select '营销中心','营销中心一部','中标' Union All
Select '营销中心','营销中心二部','中标' Union All
Select '设计研究院','设计一部','中标' Union All
Select '设计研究院','设计一部','合同'
)
select Center, DepartName
, sum(case when State='中标' then 1 else 0 end)
, sum(case when State='合同' then 1 else 0 end)
from t1
group by Center, DepartName
with ROLLUP
Declare @t table (Center varchar(50),DepartName varchar(50) ,State varchar(50))
insert into @t
Select '营销中心','营销中心一部','中标' Union All
Select '营销中心','营销中心二部','中标' Union All
Select '设计研究院','设计一部','中标' Union All
Select '设计研究院','设计一部','合同'
select case when GROUPING(departname)=1 and GROUPING(center)<>1 then '小计'
when GROUPING(departname)=1 and GROUPING(center)=1 then '合计'
else departname end as departname,
sum(case when State='中标' then 1 else 0 end) as '中标',
sum(case when State='合同' then 1 else 0 end) as '合同'
from @t
group by Center,departname with cube
having not (GROUPING(center)=1 and GROUPING(departname)=0)
order by center desc,GROUPING(departname),GROUPING(center)