存储过程:获取包含汇总结果的行并将它们放在输出参数中

时间:2013-06-20 18:56:52

标签: stored-procedures sql-server-2012

让我们进行简单的查询

SELECT SUM(Field1), Field2 FROM TableName GROUP BY Field2

在我的情况下,我知道有一个事实,即field2(1-5)有MAX 5个不同的值,所以这个查询将返回最多5行(可能更少,例如,如果没有Field2值的记录= 2)。

我感兴趣的是将SUM(field1)中的值存储到OUTPUT参数中,具体取决于它所属的Field2值。目前我从存储过程(简化)中执行此操作:

SELECT @prm1 = SUM(Field1) FROM TableName WHERE Field2=1
SELECT @prm2 = SUM(Field1) FROM TableName WHERE Field2=2
SELECT @prm3 = SUM(Field1) FROM TableName WHERE Field2=3
SELECT @prm4 = SUM(Field1) FROM TableName WHERE Field2=4
SELECT @prm5 = SUM(Field1) FROM TableName WHERE Field2=5

有没有更好的方法来实现这一目标?

编辑:此存储过程正在执行10个以上的查询并从每个查询中获取摘要。我决定不与客户端分开执行10多个不同的查询,而是将它们放在一个存储过程中,然后通过输出参数返回结果。这些查询的目的不是单独调用它们,而只是作为批处理。但是,如果您认为这不是一个好主意,我会听取您的论点。

1 个答案:

答案 0 :(得分:0)

您可以使用条件SUM()

执行此操作
SELECT @prm1 = SUM(CASE WHEN field2 = 1 THEN field1 ELSE NULL END), 
       @prm2 = SUM(CASE WHEN field2 = 2 THEN field1 ELSE NULL END), 
       @prm3 = SUM(CASE WHEN field2 = 3 THEN field1 ELSE NULL END), 
       @prm4 = SUM(CASE WHEN field2 = 4 THEN field1 ELSE NULL END), 
       @prm5 = SUM(CASE WHEN field2 = 5 THEN field1 ELSE NULL END) 
  FROM Table1 

这是 SQLFiddle 演示