首页 > 解决方案 > 在sql中生成数据组合

问题描述

我有一张如下表 -

COL1 COL2
101 一个
102
102 C
102 D
103 C
103

我需要为 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

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

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

标签: sqlsql-serverwindow-functionscross-joinhana-sql-script

解决方案


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

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

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;

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


推荐阅读