在数据库中创建一个名为test的表 字段类型如下图
插入数据如下图
这就是基础表了
--数值类型select cast(byint as nvarchar) as '数字',SUM(value) as '值'from test group by byintunion all select '合计',SUM(value) from test--字符串类型select bychar as '字符串',SUM(value) as '值'from test group by bycharunion all select '合计',SUM(value) from test--时间类型select cast(bytime as nvarchar) as '时间',SUM(value) as '值'from test group by bytimeunion all select '合计',SUM(value) from test结果如下图
因为每个汇总下面都加了一行合计,所以分类汇总字段需要转化为字符串类型,这样才不出错。
--时间类型日期select CONVERT(nvarchar(10),bytime,120) as '时间',SUM(value) as '值'from test group by CONVERT(nvarchar(10),120)union all select '合计',SUM(value) from test--时间类型日期二select CONVERT(nvarchar(10),(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),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 getresultgocreate function getresult(@scode nvarchar(50)) returns nvarchar(50)begindeclare @result nvarchar(50)if @scode%2=1 set @result= '单数'else if @scode%2=0 set @result= '双数'else set @result= '其他'return @resultendgoselect 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的自定义函数,要求根据字段判断是否为单双数
结果如下
总结 基础表是死的,我们得到的信息及展现形式是活的。 就像本文的格式一样,文章的主体结构可以是以小一号的标题来展现,但主题的标题一定要突出。 总结
以上是内存溢出为你收集整理的SqlServer 根据字段分类汇总信息全部内容,希望文章能够帮你解决SqlServer 根据字段分类汇总信息所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)