grouping()函数:grouping(字段)=1则对字段进行了合计,grouping(字段)=0则此行没有对字段合计,
根据这个特性我们可以控件要显示的统计列表,例子如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
DROP TABLE [product]
CREATE TABLE [product] ( [proid] [varchar] (5) NULL , [in_date] [varchar] (10) NULL , [qty] [int] NULL )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '1' , '2004-1-2' , 10 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '2' , '2004-1-3' , 13 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '3' , '2004-1-4' , 10 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '4' , '2004-1-4' , 13 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '5' , '2004-1-5' , 14 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '6' , '2004-1-6' , 15 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '7' , '2004-1-7' , 63 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '8' , '2004-1-8' , 43 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '3' , '2004-1-4' , 10 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '4' , '2004-1-4' , 13 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '5' , '2004-1-5' , 14 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '3' , '2004-1-5' , 10
CREATE TABLE [product] ( [proid] [varchar] (5) NULL , [in_date] [varchar] (10) NULL , [qty] [int] NULL )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '1' , '2004-1-2' , 10 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '2' , '2004-1-3' , 13 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '3' , '2004-1-4' , 10 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '4' , '2004-1-4' , 13 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '5' , '2004-1-5' , 14 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '6' , '2004-1-6' , 15 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '7' , '2004-1-7' , 63 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '8' , '2004-1-8' , 43 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '3' , '2004-1-4' , 10 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '4' , '2004-1-4' , 13 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '5' , '2004-1-5' , 14 )
INSERT [product] ( [proid] , [in_date] , [qty] ) VALUES ( '3' , '2004-1-5' , 10
思路分析:先写出最原始的查询,然后根据需要判断grouping(字段)和用case 显示字段值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
select
case grouping(proid) when 1 then '合计' --在这里处理字符显示
when 0 then case grouping(in_date)
when 1 then proid+'小计'
when 0 then proid
end
end
proid,in_date,sum(qty) '数量',grouping(proid) as 'gpProid',
grouping(in_date) as 'gpIn_date'
from product
group by proid,in_date with rollup
having grouping(proid)+grouping(in_date)=0--显示常规的sum值,没有合计
or grouping(proid)+grouping(in_date)=1
or grouping(proid)+grouping(in_date)=2 --按proid,in_date总计
order by proid --只有按proid,in_date的sum(qty)合计
case grouping(proid) when 1 then '合计' --在这里处理字符显示
when 0 then case grouping(in_date)
when 1 then proid+'小计'
when 0 then proid
end
end
proid,in_date,sum(qty) '数量',grouping(proid) as 'gpProid',
grouping(in_date) as 'gpIn_date'
from product
group by proid,in_date with rollup
having grouping(proid)+grouping(in_date)=0--显示常规的sum值,没有合计
or grouping(proid)+grouping(in_date)=1
or grouping(proid)+grouping(in_date)=2 --按proid,in_date总计
order by proid --只有按proid,in_date的sum(qty)合计