在 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
请帮助并提出答案。我尝试使用 LAG
、LEAD
、CROSS 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
我有一个 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
请帮助并提出答案。我尝试使用 LAG
、LEAD
、CROSS 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