0

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

如果 KSCHL = Y 则结果将从 KBETR 设置。如果没有,Result 将由它自己的 KBETR * KBETR 从相应的密钥对(MATNR,WERKS)中设置。请参阅示例。

MATNR | 工作 | KSHL | KBETR | 预期结果

01 | 一个 | X | 10 | 200×10

01 | 一个 | 是 | 200 | 200

01 | 一个 | Z | 15 | 200×15

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

感谢您的帮助,非常感谢

4

2 回答 2

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 条件类型会发生什么。我假设您确保一次只有一个值。

于 2018-10-18T12:27:22.297 回答
1

另一种选择是使用SQL First_Value() 分析函数

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

这是您的 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 条件)

我希望它有所帮助,

于 2018-10-18T12:36:46.833 回答