您的位置:首页 > 数据库

SqlServer 根据字段分类汇总信息

2015-08-18 00:12 381 查看
在一张基础表中,我们经常要根据一个字段的不同表达方式来汇总数据。下面我们将进行简单的汇总操作。
在数据库中创建一个名为test的表
字段类型如下图



插入数据如下图



这就是基础表了

根据基础表搜索汇总信息

根据字段的值汇总信息

下面是三种类型的汇总语句

--数值类型
select
cast(byint as nvarchar) as '数字',
SUM(value) as '值'
from test group by byint
union all select '合计',SUM(value) from test
--字符串类型
select
bychar as '字符串',
SUM(value) as '值'
from test group by bychar
union all select '合计',SUM(value) from test
--时间类型
select
cast(bytime as nvarchar) as '时间',
SUM(value) as '值'
from test group by bytime
union all select '合计',SUM(value) from test结果如下图



因为每个汇总下面都加了一行合计,所以分类汇总字段需要转化为字符串类型,这样才不出错。

根据字段的函数汇总信息

根据时间的不同函数一二汇总信息语句如下
--时间类型日期
select
CONVERT(nvarchar(10),bytime,120) as '时间',
SUM(value) as '值'
from test group by CONVERT(nvarchar(10),bytime,120)
union all select '合计',SUM(value) from test
--时间类型日期二
select
CONVERT(nvarchar(10),bytime,120) as '时间',
(select SUM(value) from test t where CONVERT(nvarchar(10),t.bytime,120)=CONVERT(nvarchar(10),test.bytime,120)) as '值'
from test group by CONVERT(nvarchar(10),bytime,120)
union all select '合计',SUM(value) from test
--时间类型小时
select
cast(DATEPART(HH,bytime) as nvarchar) as '时间',
SUM(value) as '值'
from test group by DATEPART(HH,bytime)
union all select '合计',SUM(value) from test
结果如下图



第一段和第二段是根据时间的获取日期的函数来汇总信息的,大家看到结果是相同的。

那这两段有什么不同呢?

我们分别运行group by之前的语句,结果如下

第一段



第二段



第二段在没有group by的情况下,每个汇总行都给了一张表的信息,相当于聚合函数,只不过显示多条数据罢了。

第三段是根据时间的获取小时的函数来汇总信息的。

根据字段的自定义函数汇总信息

根据数值类型不同的统计信息汇总信息的语句如下
--自定义函数
if exists(select 1 from sysobjects where id=OBJECT_ID('getresult') and OBJECTPROPERTY(id,'IsInlineFunction')=0)
drop function getresult
go
create function getresult(@scode nvarchar(50)) returns nvarchar(50)
begin
declare @result nvarchar(50)
if @scode%2=1 set @result= '单数'
else if @scode%2=0 set @result= '双数'
else set @result= '其他'
return  @result
end
go
select
dbo.getresult(byint) as '单双数',
SUM(value) as '值'
from test group by dbo.getresult(byint)
union all select '合计',SUM(value) from test
简单解释一下语句:

1.在名为getresult的自定义函数存在的情况下删除此函数

2.创建名为getresult的自定义函数,要求根据字段判断是否为单双数

结果如下



总结
基础表是死的,我们得到的信息及展现形式是活的。

就像本文的格式一样,文章的主体结构可以是以小一号的标题来展现,但主题的标题一定要突出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息