T-SQL |如何在While循环中将值动态设置为变量

时间:2018-11-14 09:37:15

标签: sql tsql

我有12个变量,并且所有变量都具有相同的SELECT语句(仅适用于1个参数)。我不知道怎么动态地做到这一点。

这是我所拥有的一个例子:

// this here should be dynamic
SET @Var1 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '1')
SET @Var2 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '2')
SET @Var3 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '3')
SET @Var4 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '4')
SET @Var5 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '5')
SET @Var6 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '6')
SET @Var7 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '7')
SET @Var9 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '8')
SET @Var9 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '9')
SET @Var10 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '10')
SET @Var11 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '11')
SET @Var12 = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = '12')    

INSERT INTO VarTable (Var1, Var2, Var3, Var4, Var5, Var6, Var7, Var8, Var9, Var10, Var11, Var12)
    VALUES (@Var1, @Var2, @Var3, @Var4, @Var5, @Var6, @Var7, @Var8, @Var9, @Var10, @Var11, @Var12)

Table Cols受到限制(无权更改表),因此我需要像这样分配它。

3 个答案:

答案 0 :(得分:1)

我认为您不需要在这里使用变量:

 $(document).ready(function(){
      $("input[name='nutr_code']").on('input',function(e){
        $("input[type='submit']").trigger( "click" );
    });
  });

但是,这里有条件的聚合就足够了,因为只有12个月。因此,不需要动态方法。

答案 1 :(得分:1)

这是您可以在这里尝试的方法:

声明具有2列的表变量

 declare @mytable table(
   VariableName varchar(255),
   VariableValue int
 )

现在声明另外2个变量,一个用于设置值,第二个用于循环遍历

 Declare @value int;
 Declare @month int = 1;

现在像这样执行while循环:

 while (@month <= 12 ) --since there are only 12 months
 begin
   set @value = (SELECT COUNT(*) FROM #TempTable WHERE MonthCol = cast(@month as varchar));
  insert into  @mytable values ('Month'+cast (@month as varchar), value );
  set @month = @month +1;
 end

现在,您将以表格形式获得数据集,您可以使用简单的查询来访问它:

VariableName   VariableValue   
-----------    -------------- 
   Month1          23
   Month2          19
   Month3          66
   Month4          12
   Month5          05
   Month6          04
   Month7          63    
   Month8          76    
   Month9          21    
   Month10         23    
   Month11         63    
   Month12         12  



Select * from @mytable where VariableName = 'Month1' 

答案 2 :(得分:0)

看起来应该是$(newRow).insertAfter($('class_tr_0'));

PIVOT

我认为我们必须“预聚合”子查询中的数据,因为INSERT INTO VarTable (Var1, Var2, Var3, Var4, Var5, Var6, Var7, Var8, Var9, Var10, Var11, Var12) SELECT [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] FROM (select MonthCol,COUNT(*) Cnt from #TempTable group by MonthCol) t PIVOT (SUM(Cnt) FOR MonthCol IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) u 子句 1 中不允许COUNT(*)。请注意,每个PIVOT都会有一个单独的MonthCol值,因此我们可以使用Cnt中的任何聚合返回未更改的单个输入-PIVOTSUMMIN。我在上面MAX中任意选择了。


1 您必须向聚合提供特定的列。