0

このSQLを使用して、タイプのすべてのグループのカウントを取得します。

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

結果は、タイプごとにカウントされた5つのレコードです。これをストアドプロシージャに変換する必要があります。上記のSQLを使用して記述する必要がありますか、それともタイプごとに5回For...Select使用して単一の値を返す必要がありますか?Select...Where...Into

リターンカウントを使用してマスターテーブルを更新します。タイプは将来増加する可能性があります。

4

1 に答える 1

2

それは、手順に何を求めるかによって異なります。

  • 5 行の select と同じ出力が必要な場合は、FOR SELECT. タイプごとに 1 つの行と、関連するカウントが取得されます。これはおそらく「標準的な」アプローチです。

  • ただし、各タイプのカウントごとに 1 つずつ、合計 5 つの出力変数が必要な場合は、次の形式のクエリを 5 つ使用できますSELECT COUNT(1) FROM types1 WHERE mytype = 'type1' INTO :type1。ただし、これは 5 つのクエリになるため、単一のFOR SELECTクエリを実行して、プロシージャで返された行をループする方がよい場合があることに注意してください。また、ある時点で 6 番目のタイプを追加する場合は、この手順を変更して追加のタイプを追加する必要があることに注意してください。

  • 単一の型をクエリする場合は、次のようなこともできます。これにより、入力パラメーターの型の単一のカウントを含む単一の行が返されます。

    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 に答える