2016-04-11 5 views
0

SQLの世界は1分で終わっており、以下のコードを変更してidが同じである各グループでcode = 0 idの次のグループに進みます。SQLカーソル - グループ内のそれぞれの出現回数をカウントする

基本的に、私はコードの複数の発生が0

サンプルデータであることしているどのように多くの注文と同じIDを持つのカウントが必要です。私の目標は私のカウントを与えるだろう

+------+------+ 
| ID | CODE | 
+------+------+ 
| 1234 | 0 | 
| 1234 | 1 | 
| 1234 | 3 | 
| 1234 | 0 | 
| 1234 | 2 | 
| 5678 | 0 | 
| 5678 | 1 | 
| 5678 | 2 | 
+------+------+ 

を上記のサンプルデータは "1"です。

Declare 
n_id NUMBER; 
n_code NUMBER; 
N_COUNT NUMBER:=0; 

cursor dups is 
select id, code 
from process; 

BEGIN 

OPEN DUPS; 

LOOP 

FETCH DUPS INTO N_ID, N_CODE; 

EXIT WHEN DUPS%NOTFOUND; 

    IF n_code = 0 THEN 
    N_COUNT := N_COUNT +1; 
    END IF; 

END LOOP; 

    IF N_COUNT > 1 THEN 
    dbms_output.put_line ('Record: ' || n_count); 
    END IF; 

CLOSE DUPS; 

END; 
+0

あなたのコードは、Oracleのように見えるので、私はそれに応じてタグを変更しません。 –

答えて

2

これは簡単なクエリで行うことができます。ループのための必要はありません:

select count(*) 
from (select id, count(*) as cnt 
     from process 
     where code = 0 
     group by id 
    ) p 
where cnt > 1; 

あなたがPL/SQLブロック内の値を印刷したい場合は

declare 
    v_cnt number; 
begin 
    select count(*) 
    into v_cnt 
    from (select id, count(*) as cnt 
      from process 
      where code = 0 
      group by id 
     ) p 
    where cnt > 1; 

    dbms_output.put_line(v_cnt); 
end; 
関連する問題