我有一个层次结构,其中包含与每个级别相关联的适当值,让我们说:
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
我的问题是:你知道吗?我知道如何只得到我的hiearchy的最后一个非空值? 我知道有一个MDX功能可以完成这项工作,但我想以另一种方式做到这一点。
要清楚,所需的输出是:
Fact Table
------------------------
Hierarchy_Id Value
1 100
7 500
8 500
(如有必要,已经完成了压缩层次结构的工作......)
提前谢谢!
答案 0 :(得分: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()
来创建模式。在某些数据库中,您可以使用+
或||
代替。