SQL 分组统计之汇总乘积

表 TableOne
Value Catalog
1 CatalogA
2 CatalogB
3 CatalogB
3 CatalogA
4 CatalogA
6 CatalogB


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

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

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

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

ALTER FUNCTION dbo.getTimeByCatalog
    (
    @Catalog varchar(
100)
    )
RETURNS real
AS
    BEGIN
        Declare @Timeall2 real
set @Timeall2 = 1

select @Timeall2 
= @Timeall2*cast(ID as float) from TableOne
where Catalog
=@catalog
return @Timeall2
    END

创建存储过程
ALTER PROCEDURE dbo.RockTest2

AS

begin 




create table #Temp2
(
Catalog 
varchar(100)
)

insert into #Temp2 (Catalog) select distinct catalog from TableOne

select Catalog,dbo.getTimeByCatalog(catalog)
from #Temp2


end

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

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


如果大家还有好的办法,请指教12。
原文地址:https://www.cnblogs.com/king_astar/p/117390.html