如何在2列上区分用户

时间:2019-07-01 21:26:03

标签: sql oracle

我有一张这样的桌子

创建表test1(id_source号,id_cible号)

在此表中我有:

1   2
1   3
1   4
1   5
2   1
1   6
10  4
10  4
5   1
2   6

在此示例中,我将得到以下结果:1-2-3-4-5-10(6行),但是我如何通过请求sql得到它?

我需要显示所有不同的用户。因此,我只能从表Test1中的所有唯一用户获取id_source或id_cible,所以我只能这样做:选择不同的id_source,id_cible,因为他只能在id_source列中的id_cible列中一个人,而不能在另一列中。

规则: id只能在1列中,例如:

1-2
1-3

所以id 1只能在id_source中。 或者他可以同时在两列中:

1-2
2-1

-例如,如果我只有1行

id source =1 and id_cible = 2. 

我想得到两行。

line 1: id: 1
line 2: id: 2

-所以我从这里开始:

选择id_source 从测试1 联盟 选择id_cible 来自测试1。

但是之后,我如何指望呢?

对于id(x)示例id:1,我想知道id_source列或id_cible_column中有多少不同(他的朋友ID)。

那我怎么用请求sql算出来呢?

谢谢!

1 个答案:

答案 0 :(得分:0)

我不清楚您要查找的内容是否是100%清楚,但是如果我正确解释了您的问题,则可以使用UNION和ORDER BY:

SELECT ID_SOURCE AS ID FROM TEST1
UNION
SELECT ID_CIBLE FROM TEST1
ORDER BY ID

产生

ID
1
2
3
4
5
6
10
7 rows

dbfiddle here

编辑

阅读并重新阅读问题后,我认为您正在寻找的是

WITH cteData AS (SELECT ID_SOURCE AS ID, ID_CIBLE AS FRIEND FROM TEST1
                 UNION
                 SELECT ID_CIBLE AS ID, ID_SOURCE AS FRIEND FROM TEST1)
SELECT ID, COUNT(FRIEND)
  FROM cteData
  GROUP BY ID
  ORDER BY ID

这会产生结果

ID  COUNT(FRIEND)
1   5
2   2
3   1
4   2
5   1
6   2
10  1
7 rows

dbfiddle here