SQL模型子句 - 仅为所选维度的一个实例执行规则

时间:2013-10-28 14:00:05

标签: sql oracle11g

我使用SQL模型子句从数据库中获取一些数据。我有一个维度,其值对于多行是相同的(这是好的,它应该发生)。

我还有一个由所选主要维度标注的参考模型。我想从参考模型中获取第一行结果的值。

更好地解释它的一个例子:

实际结果:

MAIN DIMENSION | Field 1 | Reference Model Field | Other fields...
    2013-01-01 |     100 |                     1 | Other values...
    2013-01-01 |     100 |                     1 | Other values...
    2013-01-01 |     100 |                     1 | Other values...
    2013-01-01 |     100 |                     1 | Other values...

我想收到什么:

MAIN DIMENSION | Field 1 | Reference Model Field | Other fields...
    2013-01-01 |     100 |                     1 | Other values...
    2013-01-01 |     100 |                0/null | Other values...
    2013-01-01 |     100 |                0/null | Other values...
    2013-01-01 |     100 |                0/null | Other values...

我在主模型中有3个维度,在参考模型中有1个维度,在规则部分我有:

ref_model_field[any, any, any] = REFERENCE.field[cv(main_dimension)]

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

好的,我设法找到了解决方案。当我记得在模型子句中使用partition by时,很容易计算每个分区实例的规则。所以我在主模型中添加了另一个维度,定义为:

row_number() over (partition by main_dimension order by some_other_field)

在规则定义中,我只需计算新维度中第一个编号行的值:

ref_model_field[any, any, any, 1] = REFERENCE.field[cv(main_dimension)]

这足以为具有相同维度值的多行获取一个值。