我使用此 SQL 来获取每组类型的计数。
select
mytype, count(mytype)
from types1
group by 1
结果是 5 条记录,每种类型都有计数。我需要将其转换为存储过程;我应该使用上面的 SQL 编写还是应该为每种类型For...Select
使用 5 次返回单个值?Select...Where...Into
我将使用返回计数来更新主表,并且类型将来可能会增加。
这取决于你想从程序中得到什么:
如果您想要与五行的选择相同的输出,请使用FOR SELECT
. 您将获得每种类型的一行和相关的计数。这可能是“标准”方法。
但是,如果您想要五个输出变量,每种类型的每个计数一个,您可以使用形式为 的五个查询SELECT COUNT(1) FROM types1 WHERE mytype = 'type1' INTO :type1
。尽管这将是五个查询,但您最好执行一个FOR SELECT
查询并循环遍历过程中返回的行。另请注意,如果您在某个时候添加第六种类型,则必须更改此过程以添加其他类型。
如果要查询单个类型,还可以执行以下操作,这将返回输入参数中类型的单个计数的单行:
CREATE PROCEDURE GetTypeCount(
TypeName VARCHAR(256)
)
RETURNS (
TypeCount INTEGER
)
AS
BEGIN
SELECT COUNT(1)
FROM types1
WHERE mytype = :TypeName
INTO :TypeCount;
SUSPEND
END