让我们进行简单的查询
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多个不同的查询,而是将它们放在一个存储过程中,然后通过输出参数返回结果。这些查询的目的不是单独调用它们,而只是作为批处理。但是,如果您认为这不是一个好主意,我会听取您的论点。
答案 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 演示