• 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。
  • 相关阅读:
    关于桌面的图片打开很慢的解决方法
    用c#进行递归组合
    ajax,js,css 入门页面
    择日宣判此案,却常再无下文
    共享软件的明确定义
    [转]大逃亡,还没出来呢
    如何收集带有附件的网页
    送一份自家产的软件给园内的兄弟姐妹作“福利”
    [转]评蒙牛内幕
    蓝侠==la*uan,破解中国共享软件联盟著名灌水专家“蓝侠””
  • 原文地址:https://www.cnblogs.com/king_astar/p/117390.html
Copyright © 2020-2023  润新知