0

我使用此 SQL 来获取每组类型的计数。

select 
    mytype, count(mytype)
from types1
group by 1

结果是 5 条记录,每种类型都有计数。我需要将其转换为存储过程;我应该使用上面的 SQL 编写还是应该为每种类型For...Select使用 5 次返回单个值?Select...Where...Into

我将使用返回计数来更新主表,并且类型将来可能会增加。

4

1 回答 1

2

这取决于你想从程序中得到什么:

  • 如果您想要与五行的选择相同的输出,请使用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
    
于 2013-03-11T04:12:31.007 回答