私は3つのテーブルを持っています:
- 階層構造を持つ2つ
(再帰型の階層の「次元」など)。 - 1つは合計データ(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
そして、DIM1の親(たとえばDIM1-A)とDIM2の親(たとえばDIM2-A)を指定し、次のようなレポートを生成する 唯一の SELECT
場所を作成したいと思います。ID1=2
ID2=2
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
。Oracle10.2の他の拡張機能は必要ありません。
言い換えると、「クラシック」SQL
のみ、および階層クエリ用のOracle拡張機能のみを使用します。
出来ますか?
いくつかの実験を試してみました。
「Connectby」、「inner join」、「sumwithOracle」を組み合わせて質問しました。
(これは非常に優れたソリューションですが、 1つの
ディメンションテーブル(「タスク」)に対してのみですが、1つのファクトテーブルに対してJOIN
2つのディメンションテーブルが必要です)が、成功しませんでした。