假设我们有一个表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键。