在 sql 中生成数据组合

Generate data combinations in sql

我有一个 table 如下所示 -

COL1 COL2
101 A
102 B
102 C
102 D
103 C
103 E

我需要为 COL1 中的一组唯一值生成所有可能的组合以及 uniqueID,如下所示 - COL1 中有 3 个唯一值,可能有 6 种组合,因此结果中应该有 18 行。

1,101,A
1,102,B
1,103,C
2,101,A
2,102,B
2,103,E
3,101,A
3,102,C
3,103,C
4,101,A
4,102,C
4,103,E
5,101,A
5,102,D
5,103,C
6,101,A
6,102,D
6,103,E

请帮助并提出答案。我尝试使用 LAGLEADCROSS JOIN,无法找到解决方案。

答案可以使用任何 HANA SQL 脚本或 Oracle SQL 或 MS-SQL。我有一个适用于 COL1 中固定数量的唯一值的解决方案,但是我需要该解决方案是动态的,并且应该适用于任意数量的组合和值。

这回答了问题的原始版本。

如果我没理解错的话,我认为最简单的方法是将值放在一行中:

select row_number() over (order by t1.col1, t2.col1, t3.col1),
       t1.col1, t1.col2,
       t2.col1, t2.col2,
       t3.col1, t3.col2
from t t1 join
     t t2
     on t1.col1 < t2.col1 join
     t t3
     on t2.col1 < t3.col1;

如果您愿意,可以取消透视这些结果。

您可以在行的不同值之间进行笛卡尔积

select *
    from (select distinct COL1
          from yourTable) as t1,
         (select distinct COL2
          from yourTable) as t2