我有下表:
+----------+----+
|customerID|name|
+----------+----+
| 1| Ram|
+----------+----+
我希望输出为(列值的所有可能值):
+----------+----+
|customerID|name|
+----------+----+
| 1| Ram|
| 2| Arm|
| 3| Mar|
| .| ...|
| .| ...|
+----------+----+
答案 0 :(得分:1)
拆分字符串,爆炸数组并使用自身交叉连接来查找所有可能的组合:
with s as (select col
from (select explode( split(lower('Ram'),'')) as col)s
where col <>''
)
select concat(upper(s1.col), s2.col, s3.col) as name,
row_number() over() as customerId
from s s1
cross join s s2
cross join s s3
where s1.col<>s2.col and s2.col<>s3.col;
结果:
OK
name customerid
Mam 1
Mar 2
Mrm 3
Mra 4
Ama 5
Amr 6
Arm 7
Ara 8
Rma 9
Rmr 10
Ram 11
Rar 12
Time taken: 185.638 seconds, Fetched: 12 row(s)
如果没有上一个WHERE s1.col<>s2.col and s2.col<>s3.col
,您将获得所有组合,例如Aaa
,Arr
,Rrr
等。