SQL 分组统计之------汇总乘积

博客介绍了自定义函数和存储过程在输入参数及使用上的差异。自定义函数输入参数只能用标量值,可返回表,函数中能用函数但不能用存储过程;存储过程输入参数数据类型多样,能使用函数,也能使用存储过程,还提到创建自定义标量值函数计算乘积。
表 TableOne
Value Catalog
1CatalogA
2CatalogB
3CatalogB
3CatalogA
4CatalogA
6CatalogB


要求:按照Catalog来汇总value的乘积
自定义函数中的输入参数只能使用标量值,不能把table当参数输入!
而存储过程的输入参数则不同:
数的数据类型。所有数据类型(包括 textntextimage)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字

因为自定义函数可以返回一个表。

  • 函数中可以使用函数
  • 函数中不能使用存储过程
  • 存储过程中可以使用函数
  • 但存储过程中不能使用存储过程
  • 事实上,存储过程能使用存储过程,比如这样:在procedure2 里面可以这样使用exec Procedure1,不过这样使用意义不是很大

创建一个自定义标量值函数
用于计算某个catalog的乘积

None.gifALTER FUNCTION dbo.getTimeByCatalog
None.gif    (
None.gif    @Catalog varchar(
100)
None.gif    )
None.gifRETURNS real
None.gifAS
None.gif    BEGIN
None.gif        Declare @Timeall2 real
None.gif
set @Timeall2 = 1
None.gif
None.gifselect @Timeall2 
= @Timeall2*cast(ID as float) from TableOne
None.gifwhere Catalog
=@catalog
None.gif
return @Timeall2
None.gif    END
None.gif

创建存储过程
None.gifALTER PROCEDURE dbo.RockTest2
None.gif
None.gif
AS
None.gif
None.gif
begin 
None.gif
None.gif
None.gif
None.gif
None.gif
create table #Temp2
None.gif(
None.gifCatalog 
varchar(100)
None.gif)
None.gif
None.gif
insert into #Temp2 (Catalog) select distinct catalog from TableOne
None.gif
None.gif
select Catalog,dbo.getTimeByCatalog(catalog)
None.gif
from #Temp2
None.gif
None.gif
None.gif
end

这样就可以得到一个乘积汇总的数据了。

当然如果还要加限制条件,可以把函数和存储过程中的TableOne换成一个带表值的自定义函数


如果大家还有好的办法,请指教12。

转载于:https://www.cnblogs.com/king_astar/archive/2005/03/12/117390.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值