先谈谈需求,我们先创建一张表,脚本如下:

create table Cost
(Id int identity(1,1) primary key,--编号CostTime date,--时间Num int--销售额
);
insert into Cost(CostTime,Num) values('2016-09-01','50');
insert into Cost(CostTime,Num) values('2016-09-01','100');
insert into Cost(CostTime,Num) values('2016-09-03','200');
insert into Cost(CostTime,Num) values('2016-09-05','2');

如果我们要统计上面的这张表在每天的销售额,可以按照CostTime分组,然后用sum(Num)进行统计,sql如下:

select CostTime,sum(Num) Num from Cost where CostTime>='2016-09-01' and CostTime<='2016-09-05' group by CostTime;

执行结果如下:

很明显只有3天的数据,如果我们想要把2号和4号的数据也显示出来呢,期望结果如下:

====================================================================================

很明显要实现上面的需求我们首先考虑的是创建一张临时表来存放2016-09-01到2016-09-05这个区间的数据,然后通过汇总关联查询即可,可是如果创建临时表对系统的开销还是比较大的,有没有什么方法可以不用创建表而实现该需求呢,答案是:表值函数

我们首先创建表值函数如下:

CREATE FUNCTION [dbo].[GetTimeCol]
(@beginTime date,@endTime date
)
RETURNS @returntable TABLE
(CostTime date
)
AS
BEGINwhile(@beginTime<=@endTime)begininsert into @returntable select @beginTimeselect @beginTime=dateadd(day,1,@beginTime)end;    RETURN
END

然后执行最终sql语句如下:

select a.CostTime,isnull(b.Num,0) Num from GetTimeCol('2016-09-01','2016-09-05') a left join
(select CostTime,sum(Num) Num from Cost where CostTime>='2016-09-01' and CostTime<='2016-09-05' group by CostTime) b
on a.CostTime=b.CostTime

OK,就得到我们希望的结果了

涛哥理解:SqlServer对表值函数支持挺好,但是不知道Oracle、MySql是否支持

转载于:https://www.cnblogs.com/duanjt/p/5853649.html

SqlServer使用表值函数汇总相关推荐

  1. C# 自定义sqlserver表值函数

    首先普及一下什么是表值函数,我是说个人理解啊,就是传进去一个参数或者不传参数,返回一个列表的函数,这个是通俗一点的说法,官方解释Sql server 的表值函数是返回一个Table类型,table类型 ...

  2. 在sqlserver中创建表值函数

    1.创建表值函数SplitStr(用逗号分割字符串) ALTER FUNCTION [dbo].[SplitStr] (@RowData nvarchar(4000), @SplitOn nvarch ...

  3. sqlserver中的表值函数和标量值函数

    顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集. 以下示例: CREATE FUNCTION ...

  4. sqlserver 表值函数

    一.单语句表值函数 ALTER function [dbo].[uf_get_jxc_da_sum](@dt char(8),@dt2 char(8)) RETURNS table as return ...

  5. MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据

    [0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据" ...

  6. mysql 实现表值函数,SQL SERVER 的 CLR表值函数

    一.使用CLR表值 函数 的背景 在SQL SERVER里面,直接读取远程 数据库 的表,似乎会占用大量的内存,出现类似错误: 链接服务器 192.168.0.1 的 OLE DB 访问接口 SQLN ...

  7. 多语句表值函数与内联表值函数区别?

    有几个例子要展示,以防万一: 内联表值 CREATE FUNCTION MyNS.GetUnshippedOrders() RETURNS TABLE AS RETURN SELECT a.SaleI ...

  8. R语言常用sys函数汇总:sys.chmod、Sys.Date、Sys.time、Sys.getenv、Sys.getlocale、sys.getpid、sys.glob、sys.info等

    R语言常用sys函数汇总:sys.chmod.Sys.Date.Sys.time.Sys.getenv.Sys.getlocale.sys.getpid.sys.glob.sys.info等 目录

  9. 将字符串分解成一个表(多行、多列)表值函数[ StrSplit_Tab]

    用一个字符串来描述一个表的内容,需要时用这个表值函数将其还原成一个表. 由于无法预知表的列数量和列名,需要使用时进行 [行列转换]. 此函数,也可以像[StrSplit]函数一样,将字符串分解成单列, ...

  10. 拆分字符串的表值函数

    1--拆分字符串的表值函数  2  3alter Function f_Split  4(  5    @Str Nvarchar(max)  6)Returns @Re Table  7(  8   ...

最新文章

  1. Electio Time poj
  2. rust腐蚀 木制窗户怎么修_冬天装修后怎么去除甲醛?紧闭门窗和准备一盆水,轻松教你解决!...
  3. 用SqlDataAdapter.Update(DataSet Ds)更新数据库
  4. 抑制恐慌,互联网能够做些什么?
  5. Jenkins构建 netcore5.0 项目时出现NU3028/NU3037错误的解决方案
  6. 媒体服务器协议,媒体服务器介绍(mediactrl架构)
  7. vue项目调用jssip_JsSIP和FreeSWITCH整合
  8. JDK源码分析(三)——HashMap 下(基于JDK8)
  9. 为什么很多人转行学习Web前端技术?
  10. word python api_WordNet Python API (整理总结)
  11. Java如何比较两个数组是否相等
  12. java redis实战
  13. 应聘网站编辑常见面试题
  14. 手游excel数据分析
  15. J2EE和J2se的区别
  16. PS入门教程之字体的变形艺术
  17. 程序员年薪百万,原来是吃到了这样的红利!
  18. 筛选出计算机或英语不及格的记录,浅谈EXCEL“高级筛选”中条件的书写
  19. 职业生涯步步高(转)
  20. google 云开启 ssh 账号密码登录

热门文章

  1. greenplum管理员日常任务
  2. 深入解析ORACLE字符集
  3. http和https的区别,不懂的一起研究【转】
  4. sql server 2005 T-SQL @@TOTAL_WRITE (Transact-SQL)
  5. linux内核之系统调用
  6. Androd UI学习之ImageSwitcher
  7. linux网络子系统分析(二)—— 协议栈分层框架的建立
  8. dow_interruptible() 源码及函数返回分析
  9. GIS教程-空间分析之水文分析
  10. ? extends T 与 ? super T