0

让我们做一个简单的查询

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

4

1 回答 1

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演示

于 2013-06-20T21:19:12.957 回答