2017-09-01 3 views
0

Ich habe eine TabellePaare ohne Duplikate zusammen gruppiert

ID GROUPID NAME 
== ======= ======== 
1  100 A 
2  100 B 
3  200 C 
4  200 D 
5  300 E 
6  100 F 

Ich mag würde eine Tabelle erstellen innerhalb einer Gruppe ohne Paaren die Permutation Paare enthält, die das gleiche auf beiden ersten sind und zweitens, dass wie folgt aussieht :

PAIRID FIRST SECOND 
====== ===== ====== 
     1  1  2 
     2  1  6 
     3  2  1 
     4  2  6 
     5  3  4 
     6  4  3 
     7  6  1 
     8  6  2 

Ich möchte es in PL/SQL oder geraden SQL-Einfügungen wenn möglich tun. Ich tat dies through Java bereits eine rekursive Funktion verwenden, um durch die Permutationen zu gehen.

+1

OK, so dass der Spaltenname spielt keine Rolle, richtig? – mathguy

+0

Korrigieren Sie es ist da, so kann ich es nennen "a", "b", "c", wenn es irgendwelche Diskussionen gibt. –

Antwort

2

Sie könnten sich registrieren um den Tisch:

SELECT ROW_NUMBER() OVER (ORDER BY a.id, b.id) AS pairid, 
     a.id AS FIRST, b.id AS second 
FROM  mytable a 
JOIN  mytable b ON a.groupid = b.groupid AND a.id <> b.id 
ORDER BY 1 ASC; 
+1

Fast da, aber - während das OP es nicht explizit gesagt hat - sieht es so aus, als ob die Pairid basierend auf "ORDER BY first, second" zugewiesen wird. Also scheint 'ROW_NUMBER()' notwendig zu sein. – mathguy

+1

@mathguy guten Fang, danke. Ich fügte eine 'Order by'-Klausel hinzu – Mureinik