标题略过,实例如下:对A,B,C,D,E这5个小组中的男女同学进行匹配,
匹配条件要求身高相同,
——而难点在于,这匹配要求最少的位移成本——即:如果小组A中的女同学,跟C,D,E组的男同学都有可匹配的,
C组可配的2男;
D组可配的10男;
E组可配的6男;那我们希望,A组先尽量跟D组的配对,配完D组后,再跟E组配,最后若还有剩的,才跟C组配,伪代码如下:SELECT 男ID
            ,ROW_NUMBER() OVER ( PARTITION BY ............ ORDER BY [可匹配数最多的组优先参与] )myNum
............
WHERE myNum = 1请教高手,如何是实现?

解决方案 »

  1.   

    按 DEC, 这个顺序生成  partition 序列。
      

  2.   

    或者根本用不着 partition ,直接一个 row_number() 加 order by 子句就可以实现。
      

  3.   

    就是各自排序生成 rid  然和2个结果集 rid序号做匹配
      

  4.   

    “直接一个 row_number() 加 order by”——直接能出结果是基于D/E/C的顺序出来?请教具体怎么实现呢?
      

  5.   

    order by decode(col, 'D', 1, 'E', 2, 'C',3, 99)