程序代码园发文地址:sql server 求多个字段中的最小值和最大值-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,sql server 求多个字段中的最小值和最大值http://www.byqws.com/blog/2143.html
今天在工作中,遇到一个需求,需要把最近6个月的出库数据,去掉一个最大值一个最小值,然后剩下的4个月的数据做平均,网上找了一下,如何在这6个字段中获取最大值,最小值。没有找到可行的办法,现将我的解决办法写出来供大家参考使用。
第一、我先将6个字段的数据组合起来并用逗号隔开
第二、准备函数 fnSplit ,用于将用“,”逗号隔开的数据处理成表格形式。
第三、准备取最大值函数 fn_getListMax ,传入一个字符串返回其中的最大值
代码如下:
ALTER FUNCTION [dbo].[fn_getListMax] ( @List varchar(200) ) RETURNS varchar(200) AS BEGIN declare @max_ int declare @temp table( id int IDENTITY ,FValue int ) insert into @temp(FValue) select convert(int,item) FROM dbo.fnSplit(@List,',') set @max_ = (select top 1 FValue from @temp order by FValue desc) RETURN @max_ END
思路:
1、将传进来的字符串用 函数 fnSplit 处理后将结果写进临时表 @temp 中
2、对临时表@temp做值的降序排序
3、将第一个数据赋值给变量 @max_
4、返回变量 @max_
返回最大值:18004
第四、准备取最小值函数 fn_getListMin,传入一个字符串返回其中的最小值
代码如下:
ALTER FUNCTION [dbo].[fn_getListMin] ( @List varchar(200) ) RETURNS varchar(200) AS BEGIN declare @min_ int declare @temp table( id int IDENTITY ,FValue int ) insert into @temp(FValue) select convert(int,item) FROM dbo.fnSplit(@List,',') set @min_ = (select top 1 FValue from @temp order by FValue) RETURN @min_ END
思路:
1、将传进来的字符串用 函数 fnSplit 处理后将结果写进临时表 @temp 中
2、对临时表@temp做值的升序排序
3、将第一个数据赋值给变量 @min_
4、返回变量 @min_
返回最小值:7793
第五、准备取中间值函数 fn_getListMiddle,传入一个字符串返回其中的中间值(排除最大值和最小值其余值)
代码如下:
ALTER FUNCTION [dbo].[fn_getListMiddle] ( @List varchar(200) ) RETURNS varchar(200) AS BEGIN declare @middle_ int declare @temp table( id int IDENTITY ,FValue int ,type varchar(200) ) insert into @temp(FValue) select convert(int,item) FROM dbo.fnSplit(@List,',') update @temp set type = 'max' where id = (select top 1 id from @temp order by FValue desc) update @temp set type = 'min' where id = (select top 1 id from @temp order by FValue) set @middle_ = (select sum(convert(int,FValue)) from @temp where type is null) RETURN @middle_ END
思路:
1、将传进来的字符串用 函数 fnSplit 处理后将结果写进临时表 @temp 中
2、临时表@temp 中这次多了一个字段 type ,通过对 值 FValue 的升序和降序排序,更新字段 type 为 “max”,“min”
3、将字段 type 为 null 的数据求和赋值给变量 @middle_
4、返回变量 @middle_
返回中间值的和:38998
第六、将以上函数待入使用场景中运用
通过以上几个函数就可以实现这个需求,获取6个月出库数据中最大值,最小值,中间值求和,剩余4个月值的平均值。
程序代码园发文地址:sql server 求多个字段中的最小值和最大值-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,sql server 求多个字段中的最小值和最大值http://www.byqws.com/blog/2143.html