SqlServer 根据字段分类汇总信息

在一张基础表中,我们经常要根据一个字段的不同表达方式来汇总数据。下面我们将进行简单的汇总操作。

在数据库中创建一个名为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的自定义函数,要求根据字段判断是否为单双数
结果如下
在这里插入图片描述

总结

基础表是死的,我们得到的信息及展现形式是活的。
就像本文的格式一样,文章的主体结构可以是以小一号的标题来展现,但主题的标题一定要突出。

转载:https://blog.csdn.net/enpterexpress/article/details/47736419

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值