2016-07-29 12 views
1

Ich habe eine Tabelle, die unten wie die aussehen:Oracle SQL: Schleifenzählwert Überlappungen zwischen Werten in der derselben Spalte

Form_ID Values 
1   a 
1   b 
1   c 
1   d 
2   a 
2   d 
2   e 
3   d 
3   e 
3   f 

I mehr als 200 Formen haben und 10.000 Werte von diesen Formen. Also möchte ich eine Schleife mit SQL machen, um überlappende unterschiedliche Werte zwischen jedem Formular zu zählen. Zum Beispiel ist die deutliche Zählung zwischen form1 und form2 2. Die Ergebnistabelle aussehen soll:

Form1 Form2 Overlap_Count 
1   2   2 
2   3   2 

Dank! Sophia

Antwort

1

try this:

Select t1.form_Id form1, t2.Form_Id form2, 
     count(*) overLAPS 
From table t1 
    join table t2 
     on t2.Form_ID > t1.form_Id 
     and t2.[Values] = t1.[Values] 
group by t1.form_Id, t2.Form_Id 
+0

Es funktioniert! Vielen Dank:) –

1

Sie können dies mit einem selbst verbinden und Aggregation:

select t1.id, t2.id, count(*) as NumOverlaps 
from t t1 join 
    t t2 
    on t1.id < t2.id and t1.value = t2.value 
group by t1.id, t2.id; 
+0

Dank! In Oracle 11g ist es overLAPS. –