oracle中表的3列的所有可能组合
Posted
技术标签:
【中文标题】oracle中表的3列的所有可能组合【英文标题】:All possible combinations from 3 columns of a table in oracle 【发布时间】:2021-09-06 13:04:20 【问题描述】:我正在寻找某种示例或想法,如何从 oracle 中的数据库表的 3 列创建所有可能的组合。
我有下表中的数据-
Name ID CODE POS_4 POS_5 POS_6
XJ 21 SAJ A
XJ 21 SAJ A
XJ 21 SAJ C
XJ 21 SAJ J
XJ 21 SAJ L
XJ 21 SAJ 10
XJ 21 SAJ 12
XJ 21 SAJ 14
我期待的结果如下-
A_A_10
A_A_12
A_A_14
A_C_10
A_C_12
A_C_14
and so on...
任何帮助将不胜感激。
【问题讨论】:
所有组合,无论Name
、ID
还是CODE
?还是仅在 same Name
、ID
和 CODE
中的组合?
【参考方案1】:
你可以使用cross join
:
select p4.pos_4 || '_' || p5.pos_5 || '_' || p6.pos_6
from (select distinct pos_4 from t) p4 cross join
(select distinct pos_5 from t) p5 cross join
(select distinct pos_6 from t) p6;
如果要消除 NULL
值,则包括:
where p4.pos_4 is not null and p5.pos_5 is not null and p6.pos_6 is not null
【讨论】:
【参考方案2】:您可以使用加入。即:
select Pos_4, Pos_5, Pos_6
from
(select Pos_4 from myTable where Pos_4 is not null) T1
cross join (select Pos_5 from myTable where Pos_5 is not null) T2
cross join (select Pos_6 from myTable where Pos_6 is not null) T3;
【讨论】:
非常感谢您的解决方案,它奏效了。但是,有时我对任何列(POS_4/POS_5/POS_6)都有一些空行,并且使用 Pos_4 不为空/Pos_5 不为空/Pos_6 不为空 如果其中任何一个为完全空,则不会给出任何结果。示例-Name ID CODE POS_4 POS_5 POS_6
XJ 21 SAJ J
XJ 21 SAJ L
XJ 21 SAJ 10
XJ 21 SAJ 12
XJ 21 SAJ 14
在上表中假设 POS_6 完全为空。对于任何其他 ID,它可能是 POS_4/POS_5。任何避免这种情况的建议。
@Jai,很抱歉我无法理解您需要的问题和输出。您会编辑您的问题以显示它吗?以上是关于oracle中表的3列的所有可能组合的主要内容,如果未能解决你的问题,请参考以下文章