Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 没有重复项的对组合在一起_Sql_Oracle_Select_Plsql - Fatal编程技术网

Sql 没有重复项的对组合在一起

Sql 没有重复项的对组合在一起,sql,oracle,select,plsql,Sql,Oracle,Select,Plsql,我有一张桌子 ID GROUPID NAME == ======= ======== 1 100 A 2 100 B 3 200 C 4 200 D 5 300 E 6 100 F 我想创建一个表,其中包含一个组中的排列对,但第一个和第二个排列对都不相同,如下所示: PAIRID FIRST SECOND ====== ===== ====== 1 1 2

我有一张桌子

ID  GROUPID  NAME
==  =======  ========
 1      100  A
 2      100  B
 3      200  C
 4      200  D
 5      300  E
 6      100  F
我想创建一个表,其中包含一个组中的排列对,但第一个和第二个排列对都不相同,如下所示:

 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

如果可能的话,我想在PL/SQL或直接SQL插入中完成。我已经使用递归函数完成了这项操作。您可以自行加入表:

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;
选择(按a.id、b.id排序)上方的行数()作为pairid,
a、 id为第一,b.id为第二
从我的表a
在a.groupid=b.groupid和a.id上连接mytable b
由1个ASC订购;

您可以自行加入表:

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;
选择(按a.id、b.id排序)上方的行数()作为pairid,
a、 id为第一,b.id为第二
从我的表a
在a.groupid=b.groupid和a.id上连接mytable b
由1个ASC订购;

好的,所以列名不起作用,对吗?更正它就在那里,如果有任何讨论,我可以称它为“a”、“b”、“c”。好的,所以列名不起作用,对吗?更正它就在那里,如果有任何讨论,我可以称它为“a”、“b”、“c”。几乎在那里,但是,虽然OP没有明确地说出来,但看起来pairid是基于“按第一、第二顺序”分配的。因此,一个
行\u NUMBER()
似乎是必要的。几乎就在那里,但是——虽然OP没有明确地说出来——看起来pairid是根据“按第一、第二顺序”分配的。因此,似乎需要一个
行编号()。