SqlServer使用表值函数汇总
先谈谈需求,我们先创建一张表,脚本如下:
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使用表值函数汇总相关推荐
- C# 自定义sqlserver表值函数
首先普及一下什么是表值函数,我是说个人理解啊,就是传进去一个参数或者不传参数,返回一个列表的函数,这个是通俗一点的说法,官方解释Sql server 的表值函数是返回一个Table类型,table类型 ...
- 在sqlserver中创建表值函数
1.创建表值函数SplitStr(用逗号分割字符串) ALTER FUNCTION [dbo].[SplitStr] (@RowData nvarchar(4000), @SplitOn nvarch ...
- sqlserver中的表值函数和标量值函数
顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型,表是单个 SELECT 语句的结果集. 以下示例: CREATE FUNCTION ...
- sqlserver 表值函数
一.单语句表值函数 ALTER function [dbo].[uf_get_jxc_da_sum](@dt char(8),@dt2 char(8)) RETURNS table as return ...
- MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据
[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据" ...
- mysql 实现表值函数,SQL SERVER 的 CLR表值函数
一.使用CLR表值 函数 的背景 在SQL SERVER里面,直接读取远程 数据库 的表,似乎会占用大量的内存,出现类似错误: 链接服务器 192.168.0.1 的 OLE DB 访问接口 SQLN ...
- 多语句表值函数与内联表值函数区别?
有几个例子要展示,以防万一: 内联表值 CREATE FUNCTION MyNS.GetUnshippedOrders() RETURNS TABLE AS RETURN SELECT a.SaleI ...
- 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等 目录
- 将字符串分解成一个表(多行、多列)表值函数[ StrSplit_Tab]
用一个字符串来描述一个表的内容,需要时用这个表值函数将其还原成一个表. 由于无法预知表的列数量和列名,需要使用时进行 [行列转换]. 此函数,也可以像[StrSplit]函数一样,将字符串分解成单列, ...
- 拆分字符串的表值函数
1--拆分字符串的表值函数 2 3alter Function f_Split 4( 5 @Str Nvarchar(max) 6)Returns @Re Table 7( 8 ...
最新文章
- Electio Time poj
- rust腐蚀 木制窗户怎么修_冬天装修后怎么去除甲醛?紧闭门窗和准备一盆水,轻松教你解决!...
- 用SqlDataAdapter.Update(DataSet Ds)更新数据库
- 抑制恐慌,互联网能够做些什么?
- Jenkins构建 netcore5.0 项目时出现NU3028/NU3037错误的解决方案
- 媒体服务器协议,媒体服务器介绍(mediactrl架构)
- vue项目调用jssip_JsSIP和FreeSWITCH整合
- JDK源码分析(三)——HashMap 下(基于JDK8)
- 为什么很多人转行学习Web前端技术?
- word python api_WordNet Python API (整理总结)
- Java如何比较两个数组是否相等
- java redis实战
- 应聘网站编辑常见面试题
- 手游excel数据分析
- J2EE和J2se的区别
- PS入门教程之字体的变形艺术
- 程序员年薪百万,原来是吃到了这样的红利!
- 筛选出计算机或英语不及格的记录,浅谈EXCEL“高级筛选”中条件的书写
- 职业生涯步步高(转)
- google 云开启 ssh 账号密码登录
热门文章
- greenplum管理员日常任务
- 深入解析ORACLE字符集
- http和https的区别,不懂的一起研究【转】
- sql server 2005 T-SQL @@TOTAL_WRITE (Transact-SQL)
- linux内核之系统调用
- Androd UI学习之ImageSwitcher
- linux网络子系统分析(二)—— 协议栈分层框架的建立
- dow_interruptible() 源码及函数返回分析
- GIS教程-空间分析之水文分析
- ? extends T 与 ? super T