SQL Oracle中一列中所有可能的组合



假设我们有一个表Z:

X Y
1 A
1 A
2 B
3 B
4 B

我想要X按Y分组的所有可能组合的列表。我怎样才能做到呢?许多人问过类似的问题,但找不到解决这个问题的方法。结果将返回如下内容

Pairs Y
1,1   A 
2,3   B
2,4   B
3,4   B

我用你的输入和一个返回你期望输出的查询创建了下面的Fiddle:你的问题

这是查询:

Select Distinct Case 
When Z1.X < Z2.X Then 
To_char(Z1.X) || ',' || To_char(Z2.X) 
Else
To_char(Z2.X) || ',' || To_char(Z1.X) 
End As Pairs,
Z1.Y
From Z Z1
Join Z Z2 ON Z1.Y = Z2.Y AND Z1.rowid <> Z2.rowid
Order by 2,1

由于没有指定表具有主键,因此我必须使用rowid以避免行与自身的组合。如果你的表有一个主键,那么最好使用PK键。