2016-04-11 23 views
0

SQL dünyasından bir dakikalığına çıktı ve her bir yinelemeyi saymak için aşağıdaki kodu nasıl değiştirebileceğimi bilmem gerekiyor. sonraki kimlik gruplarına geçin. TemeldeSQL İmleç - Gruptaki Her Oluşumu Sayma

, ben kod birden fazla olay olarak sahip aynı kimliğe sahip kaç siparişler sayımını ihtiyaç 0.

Örnek Veri:

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

Amacım bana sayımını verecekti Yukarıdaki örnek veriler için "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

Kodunuz Oracle benziyor bu yüzden buna göre etiketlerini değiştirdi. –

cevap

2

Bunu basit bir sorgu ile yapabilirsiniz. bir döngü gerek yoktur:

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

Bir PL/SQL bloğunda değerini yazdırmak istiyorsanız

:

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; 
İlgili konular