Oracle SQL:同一列中的值之间的循环计数重叠

Oracle SQL:同一列中的值之间的循环计数重叠,sql,oracle,loops,Sql,Oracle,Loops,我有一张桌子,看起来像下面的那张: Form_ID Values 1 a 1 b 1 c 1 d 2 a 2 d 2 e 3 d 3 e 3 f 我有200多个表单和10000多个来自这些表单的值。所以我想使用SQL做一个循环来计算每个表单之间重叠的不同值。例如,form1

我有一张桌子,看起来像下面的那张:

Form_ID   Values
1            a
1            b
1            c
1            d
2            a
2            d
2            e
3            d
3            e
3            f
我有200多个表单和10000多个来自这些表单的值。所以我想使用SQL做一个循环来计算每个表单之间重叠的不同值。例如,form1和form2之间的不同计数是2。结果表应如下所示:

Form1    Form2   Overlap_Count
1         2           2
2         3           2
谢谢!
Sophia

您可以通过自连接和聚合来实现这一点:

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;
选择t1.id、t2.id、count(*)作为NumOverlaps
从t1连接
t2
在t1.id
试试这个:

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 

谢谢在Oracle 11g中,它是重叠的。