0

各レベルにリンクされた適切な値を持つ階層があります。たとえば、次のようにします。


A               100
  A1            NULL
  A2            NULL
B
  B1            NULL
  B2            1000
      B21       500 
      B22       500
  B3            NULL

この階層は、私のデータベースでは親子階層として具体化されています


Hierarchy Table
------------------------
Id       Code      Parent_Id
1          A          NULL
2          A1          1
3          A2          3
4          B          NULL
5          B1          4
6          B2          4
7          B21         6
8          B22         6
9          B3          4

そして、ここに私のファクトテーブルがあります:


Fact Table
------------------------
Hierarchy_Id          Value
1                      100
6                      1000
7                      500
8                      500

私の質問は次のとおりです:私の階層の最後の空でない値のみを取得する方法を知っていますか? このジョブを実行できる MDX 関数があることは知っていますが、別の方法でこれを実行したいと考えています。

明確にするために、望ましい出力は次のようになります。


Fact Table
------------------------
Hierarchy_Id          Value
1                      100
7                      500
8                      500

(必要であれば、階層をフラット化する作業はすでに行われています...)

前もって感謝します!

4

1 に答える 1

0

階層のコードが正しい場合は、コード内の情報を使用して階層の深さを判断できます。それから始まる長いコードがある「コード」を除外したいと思います。

その場合:

select f.*
from fact f join
     hierarchy h
     on f.hierarchyId = h.hierarchyId
where not exists (select 1
                  from fact f2 join
                       hierarchy h2
                       on f2.hierarchyId = h2.hierarchyId
                  where h2.code like concat(h.code, '%') and
                        h2.code <> h.code
                 )

ここでは、関数concat()を使用してパターンを作成しました。一部のデータベースでは、代わりに+orを使用する場合があります。||

于 2013-05-27T13:56:24.707 に答える