自定义函数实现字符串中数据的运算和统计
来源:互联网 发布:淘宝客的佣金怎么提现 编辑:程序博客网 时间:2024/05/22 15:54
问题:
数据表如下
cate values dates
A1 12.32,15.6,14.5,45.00,78.12,23.45 2006-04-01
A2 14.56,67.23,45.12,23.1,34.67,56.98 2006-04-01
A1 12.31,15.6,14.5,44.00,78.12,23.45 2006-04-01
A2 14.56,67.23,45.12,23.1,34.67,56.98 2006-04-01
A1 12.32,15.6,14.5,45.00,78.12,23.45 2006-05-01
A2 14.56,67.23,45.12,23.1,34.67,56.98 2006-05-01
A1 12.31,15.6,14.5,44.00,78.12,23.45 2006-05-01
A2 14.56,67.23,45.12,23.1,34.67,56.98 2006-05-01
不用存储过程实现如下数据统计
cate T1 dates
A1 24.63,31.2,29.0,89.0,156.24,46.9 2006-04-01
A1 24.63,31.2,29.0,89.0,156.24,46.9 2006-05-01
A2 29.12,134.46,90.24,46.2,69.34,113.96 2006-04-01
A2 29.12,134.46,90.24,46.2,69.34,113.96 2006-05-01
==========================================================================
就是 values 值之间用,隔开的,当cate和dates 相同时,算values中各个以,隔开的数值的累加,要求是不用存储过程实现
--建立
create table up(
cate varchar(3),
[values] varchar(50),
dates datetime
)
insert up select
'A1','12.32,15.6,14.5,45.00,78.12,23.45','2006-04-01'
union all select
'A2','14.56,67.23,45.12,23.1,34.67,56.98','2006-04-01'
union all select
'A1','12.31,15.6,14.5,44.00,78.12,23.45','2006-04-01'
union all select
'A2','14.56,67.23,45.12,23.1,34.67,56.98','2006-04-01'
union all select
'A1','12.32,15.6,14.5,45.00,78.12,23.45','2006-05-01'
union all select
'A2','14.56,67.23,45.12,23.1,34.67,56.98','2006-05-01'
union all select
'A1','12.31,15.6,14.5,44.00,78.12,23.45','2006-05-01'
union all select
'A2','14.56,67.23,45.12,23.1,34.67,56.98','2006-05-01'
go
--加法函数
create function fn_Plus(
@s1 varchar(50),
@s2 varchar(50)
)
returns varchar(50)
as
begin
if @s1 is null or @s1=''
return @s2
if @s2 is null or @s2=''
return @s1
declare @r varchar(50)
set @r=''
declare @f1 float
declare @f2 float
while charindex(',',@s1)>0 and charindex(',',@s2)>0
begin
set @f1=left(@s1,charindex(',',@s1)-1)
set @f2=left(@s2,charindex(',',@s2)-1)
set @s1=stuff(@s1,1,charindex(',',@s1),'')
set @s2=stuff(@s2,1,charindex(',',@s2),'')
set @r=@r+','+cast(@f1+@f2 as varchar)
end
if @s1<>'' and @s2<>''
set @f1=@s1
set @f2=@s2
set @r=@r+','+cast(@f1+@f2 as varchar)
if @r<>''
set @r=stuff(@r,1,1,'')
return @r
end
go
--求值函数
create function fn_Values(
@cate varchar(3),
@dates datetime
)
returns varchar(50)
as
begin
declare @r varchar(50)
set @r=''
select @r=dbo.fn_Plus(@r,[values]) from up where cate=@cate and dates=@dates
return @r
end
go
--查询
select cate,dbo.fn_values(cate,dates) as T,dates
from up
group by cate,dates
--结果
cate T dates
---- -------------------------------------------------- ------------------------------------------------------
A1 24.63,31.2,29,89,156.24,46.9 2006-04-01 00:00:00.000
A1 24.63,31.2,29,89,156.24,46.9 2006-05-01 00:00:00.000
A2 29.12,134.46,90.24,46.2,69.34,113.96 2006-04-01 00:00:00.000
A2 29.12,134.46,90.24,46.2,69.34,113.96 2006-05-01 00:00:00.000
(所影响的行数为 4 行)
- 自定义函数实现字符串中数据的运算和统计
- 自定义函数实现字符串中数据的运算和统计2
- 字符串中数据的运算和统计
- mysql自定义函数实现统计一个字符串在另一个长字符串中出现的次数
- C语言 - 自定义实现字符串统计函数
- 在复数类中自定义类型转换函数实现复数和非复数之间的运算
- C++中,自定义string类,实现字符串的赋值“=”和连接函数“+”
- java中调JavaScript的eval() 函数实现字符串的运算(ScriptEngineManger)
- 自定义函数分别实现字符串翻转和添加字符串分隔符的功能
- Ex7_4编写函数,统计此字符串中字母、数字、空格和其他字符的个数
- SQL自定义函数实现字符串截取转化为整型(主要用于对批量数据的操作)
- 利用自定义数据集运算函数实现字符串的特殊转化
- 自定义数字和字符串的转换函数
- AS3实现经典算法(四) 统计字符串中数字、英文字母、空格和其它字符的个数
- Java中实现统计一个字符串在另一个字符串中出现的次数统计
- 统计二进制中1的个数和 - 位运算
- 计算机中数据的表示和运算
- LoadRunner中自定义C函数实现字符串替换
- 用C# 实现C/S模式下软件自动在线升级
- 高质量C++/C编程指南[8]
- 模型驱动SOA帮助提高开发团队效率
- C++/C代码审查表
- 在端口 9081 的主机 CHQWEB 上启动传输失败。很可能是因为端口已被使用。请确保没有其它应用程序使用此端口,并重新启动服务器。com.ibm.ws.webcontainer.exception.TransportException: Failed
- 自定义函数实现字符串中数据的运算和统计
- 『短篇』正视自己
- javascript中Style之visibility与display的比较
- 如何和BT一样建立一个比较大的文件,然后再写入
- 教你短信和女生说话的24句
- 动态链接库小结
- Python logging RotatingFileHandler bug
- Vim学习经验小结(kelly)
- ASP数据库编程技巧