HANA-使用其他行的数据进行计算

时间:2018-10-18 07:21:19

标签: sap hana hana-studio

我有一个要求,请使用属性视图根据条件和来自另一行的值来计算结果。

如果KSCHL = Y,则将根据KBETR设置结果。如果不是,则结果将由其自己的KBETR * KBETR从对应的密钥对(MATNR,WERKS)中设置。请参见示例。

MATNR | WERK | KSCHL | KBETR |预期结果

01 | A | X | 10 | 200 x 10

01 | A | Y | 200 | 200

01 | A | Z | 15 | 200 x 15

我正在考虑添加一个隐藏列以将值200存储在其他行上,然后使用它做倍数,或者创建一个带有参数的计算视图以保存该值。但是,对于该要求,我仍然没有找到正确的答案。

非常感谢您的帮助

Binh

2 个答案:

答案 0 :(得分:1)

此语句的最简单SQL Select将如下所示,包括不使用sql windows函数的自联接

select 
    Table1.*,
    case 
        when Table1.KSCHL = 'Y' 
        then Table1.KBETR 
        else
            Table1.KBETR * t2.KBETR
    end as Expected
from Table1
left join Table1 as t2
    on Table1.matnr = t2.matnr and
       Table1.werk  = t2.werk and
       t2.kschl = 'Y';

您的问题可能是:如果有两个Y条件类型,将会发生什么。我假设您确保一次只能有一个值。

答案 1 :(得分:1)

另一个选择是使用SQL First_Value() analytic function

您可以参考给定的示例,尽管该示例位于SQL Server上,但该功能在SQL Server开发人员的HANA数据库上具有相同的用法和语法

这是您的HANA数据库的示例SQL查询

select  
    *,
    case 
        when KSCHL = 'Y' 
        then KBETR 
        else
            KBETR * ( first_value(KBETR) over (partition by matnr, werk order by case when kschl = 'Y' then 0 else 1 end) )
    end as Expected
from Table1

first_value()函数为用Partition By子句定义的每个MATNR,WERK组合获取CASE语句排序的KBETR值(以在First_Value函数的开头获取Y条件)

我希望这会有所帮助,