Stored procedures 存储过程:获取具有摘要大小调整的行,并将其放置在输出参数中

Stored procedures 存储过程:获取具有摘要大小调整的行,并将其放置在输出参数中,stored-procedures,sql-server-2012,Stored Procedures,Sql Server 2012,让我们做一个简单的查询 SELECT SUM(Field1), Field2 FROM TableName GROUP BY Field2 在我的例子中,我知道field2(1-5)最多有5个不同的值,因此此查询将返回最多5行(例如,如果没有field2 value=2的记录,则可能会更少) 我感兴趣的是根据它所属的Field2值,将SUM(field1)中的值存储到OUTPUT参数中。目前,我通过存储过程(简化)执行此操作: 有没有更好的方法来实现这一点 编辑:此存储过程正在执行10个以上的

让我们做一个简单的查询

SELECT SUM(Field1), Field2 FROM TableName GROUP BY Field2
在我的例子中,我知道field2(1-5)最多有5个不同的值,因此此查询将返回最多5行(例如,如果没有field2 value=2的记录,则可能会更少)

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

有没有更好的方法来实现这一点


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

您可以使用条件式的
SUM()

SELECT@prm1=SUM(当field2=1时,选择field1,否则选择NULL END),
@prm2=SUM(字段2=2,则字段1为空结束时),
@prm3=总和(字段2=3时,则字段1为空结束),
@prm4=SUM(字段2=4,则字段1为空结束时),
@prm5=SUM(字段2=5,然后字段1为NULL END时的情况)
来自表1

下面是演示

为什么它必须是一个输出参数?为什么不直接返回
选择的结果集呢?您需要在问题中包括如何使用这些输出。因为我正在计算大约12-15个汇总值,并将它们返回到我的应用程序中。所以,我没有从我的应用程序执行12个不同的查询,而是通过一个存储过程执行它们,并通过输出参数将结果传递给应用程序。
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