首页 > 解决方案 > 查找平均值,最小值,最大值,而列名存储在 sql 存储过程中的临时变量中

问题描述

我有一张表,其中 valuedata 具有多个列,因为a,b,c,d,e,f 我想获取min,对于某些列maxavg并非所有列都来自存储过程的输入参数。我的问题是当我发现avg(@column1)它给我的输出不是该列的值时,我该如何解决这个问题


--[MinMaxAvg_test]  'A,b,c'

    ALTER PROCEDURE [dbo].[MinMaxAvg_test]
    @Parameters varchar(Max)

    AS  
    BEGIN

    Declare @ParaCount int
    declare @Para varchar(10)

    Declare @SelectedParametr_Table table(ID int identity(1,1), Parameter varchar(20))
    Insert into @SelectedParametr_Table SELECT Item FROM dbo.SplitString(@Parameters, ',')

     set @ParaCount=1
        While(@ParaCount <=(Select count(Parameter) from @SelectedParametr_Table))
            Begin
        set @Para=null
         select @Para=Parameter from @SelectedParametr_Table where id=@ParaCount

        Select top(1) min(@Para) as MIN,max(@Para) As MAX,avg(@Para) as AVG from VALUEDATA

      set @ParaCount=@ParaCount+1

      end
        set @ParaCount=1

    END

Output of this I am getting as follows :
             MIN   MAX  AVG
              A     A    A

             MIN   MAX  AVG
              B     B    B 

             MIN   MAX  AVG
              C     C    C 

我想要这个列的值 任何人都可以告诉我如何做到这一点

标签: sql-servertsqlstored-procedures

解决方案


使用动态查询,例如:

set @vQuery as nvarchar(max) = 'Select top(1) min('+@Para+') as MIN,max(+'@Para'+) As MAX,avg('+@Para+') as AVG from VALUEDATA'

exec (@vQuery)

作为最佳实践,我建议将 while 循环更改为游标。


推荐阅读