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 回答