我有 3 张桌子:
- 两个具有层次结构
(如递归类型层次结构的“维度”); - 一个对数据求和(如 X 列的“事实”)。
他们在这里:
- DIM1 (ID1, PARENT2, NAME1)
- DIM2 (ID2, PARENT2, NAME2)
- 事实(ID1、ID2、X)
DIM1 表示例:
-- 1 0 DIM1
---- 2 1 DIM1-A
------ 3 2 DIM1-A-A
-------- 4 3 DIM1-A-A-A
-------- 5 3 DIM1-A-A-B
------ 6 2 DIM1-A-B
-------- 7 6 DIM1-A-B-A
-------- 8 6 DIM1-A-B-B
------ 9 2 DIM1-A-C
---- 10 1 DIM1-B
------ 11 10 DIM1-B-C
------ 12 10 DIM1-B-D
---- 13 1 DIM1-C
DIM2 表示例:
-- 1 0 DIM2
---- 2 1 DIM2-A
------ 3 2 DIM2-A-A
-------- 4 3 DIM2-A-A-A
-------- 5 3 DIM2-A-A-B
-------- 6 3 DIM2-A-B-C
------ 7 2 DIM2-A-B
---- 8 1 DIM2-B
---- 9 1 DIM2-C
FACTS 表示例:
1 1 100
1 2 30
1 3 500
-- ................
13 9 200
我想创建唯一 SELECT
一个我将为 DIM1 指定父级(例如 DIM1-A)和 DIM2ID1=2
父级(例如ID2=2
DIM2-A)的地方,SELECT
并将生成如下报告:
Name_of_1 Name_of_2 Sum_of_X
--------- --------- ----------
DIM1-A-A DIM2-A-A (some sum)
DIM1-A-A DIM2-A-B (some sum)
DIM1-A-B DIM2-A-A (some sum)
DIM1-A-B DIM2-A-B (some sum)
DIM1-A-C DIM2-A-A (some sum)
DIM1-A-C DIM2-A-B (some sum)
我想使用CONNECT BY
词组、START WITH
词组、SUM
词组、GROUP BY
词组和OUTER
或INNER
(?)JOIN
。我不需要 Oracle 10.2 的其他扩展。
换句话说:只有“经典”SQL 和
层次查询的 Oracle 扩展。
可能吗?
我在Mixing together Connect by, inner join and sum with Oracle中尝试了一些有问题的实验
(这是一个非常好的解决方案,但仅适用于一个
维度表(“任务”),但我需要将JOIN
两个维度表转换为一个事实表),但我没有成功。