博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer使用表值函数汇总
阅读量:6229 次
发布时间:2019-06-21

本文共 1445 字,大约阅读时间需要 4 分钟。

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

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)ASBEGIN    while(@beginTime<=@endTime)    begin        insert into @returntable select @beginTime        select @beginTime=dateadd(day,1,@beginTime)    end;        RETURNEND

然后执行最终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) bon a.CostTime=b.CostTime

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

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

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

你可能感兴趣的文章
第61节:Java中的DOM和Javascript技术
查看>>
排名前十的程序员应用软件曝光,你有用过吗?
查看>>
关于android中监控u盘插入与拔出的困惑与思考
查看>>
Golang 并发爬虫 爬取某著名游戏媒体
查看>>
java(1)
查看>>
支持向量机(Support Vector Machine)
查看>>
react native FlatList内嵌自己的Component不刷新的处理
查看>>
spring boot 加载过程分析--ConfigurationClassPostProcessor
查看>>
Python基础教程,第九讲,异常处理
查看>>
再谈MV*(MVVM MVP MVC)模式的设计原理—封装与解耦
查看>>
一看就会的 egret 入门教程
查看>>
大型互联网 b2b b2c o2o 电子商务微服务云平台
查看>>
Flutter之可滑动Widget
查看>>
富文本编辑器-CKeditor5
查看>>
前端基础22:数组迭代基本方法
查看>>
GGally与pairs相关关系图_史上最全(一)
查看>>
从内存映射mmap说开去
查看>>
Swift4如何扫描二维码了解一下
查看>>
散列表:如何实现word编辑器的拼写检查?
查看>>
可用的哈希函数(一)
查看>>