与SQL Server配对

时间:2015-07-15 08:26:11

标签: sql sql-server sql-server-2008 graph-theory

对不起,因为这个问题很难。

我试图找到一个查询来对两组之间的元素进行配对。

如果允许所有组合,答案很简单,我们可以在以下示例中看到: 考虑2套" In"和" Out"。在" In"中,有" A"和" B",以及" Out" " C"和" D"。

以下是所有可能的组合

In Out
== ==
A  C
A  D
B  C
B  D

配对元素的解决方案是按每个元素计算Row_Number分区,并考虑row_number相等的行。

In Out Row_numb part. by In Row_numb part. by Out
== ==  ==================== =====================
A  C   1                    1
A  D   2                    1
B  C   1                    2
B  D   2                    2

所以具有相等row_number:(A-C)AND(B-D)配对的解决方案是好的。

现在,我只在允许某些组合时寻找解决方案。考虑这个例子:

In Out
== ==
A  C
B  C
B  D

有两种配对解决方案:{(A-C),(B-D)}和{(B-C)}

我的问题是找到一个查询来检索这个解决方案,理想情况下是最大化同伴数量的解决方案:这里{(A-C),(B-D)}。

我尝试过递归CTE而没有成功

===编辑1:回答@Tanner

这是我使用的查询。

select I, O
from (
        select  I, O, 
                n_i = row_number() over (partition by I order by O),
                n_o = row_number() over (partition by O order by I)
        from MyTab ) as SubQ

where n_i = n_o

当我在第一个选项卡上用4行播放此查询时,结果集为:

I          O
---------- ----------
A          C    
B          D    

但在有3行的第二个标签上,我想念B-D对:

I          O
---------- ----------
A          C    

0 个答案:

没有答案