SqlServer使用表值函数汇总
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 BEGIN while(@beginTime<=@endTime) begin insert into @returntable select @beginTime select @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是否支持
C#.net. WPF.core 技术交流群 群号205082182,欢迎加入,也可以直接点击左侧和下方的"加入QQ群",直接加入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!