sql-server - 查找平均值,最小值,最大值,而列名存储在 sql 存储过程中的临时变量中
问题描述
我有一张表,其中 valuedata 具有多个列,因为a,b,c,d,e,f
我想获取min
,对于某些列max
,avg
并非所有列都来自存储过程的输入参数。我的问题是当我发现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
我想要这个列的值 任何人都可以告诉我如何做到这一点
解决方案
使用动态查询,例如:
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 循环更改为游标。
推荐阅读
- dart - 你可以在 Dart 中将扩展方法作为函数参数传递吗?
- excel - 从包含文本字符串的另一个单元格创建单个单元格列表
- android - 反序列化从 json api 继承的类
- javascript - 如何在Javascript中找到父母和父母之外的下一个最接近的输入?
- node.js - 无法使用 npm 更新节点版本
- tensorflow - AttributeError:模块'tensorboard.summary._tf.summary'没有属性'scaler'
- java - Spring Boot 抛出“无法生成类的 CGLIB 子类”的问题
- numpy - 库示例:TypeError:“numpy.float64”对象不能解释为整数
- angular - Angular Unit Testing - 如何测试创建 Websocket 的服务
- android - Play 应用内更新不适用于启用了 Play 应用签名的应用