【问题标题】:HANA - Calculate using data from other lineHANA - 使用其他行的数据进行计算
【发布时间】:2019-03-22 23:04:34
【问题描述】:

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

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

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

01 |一个 | X | 10 | 200 x 10

01 |一个 |是 | 200 | 200

01 |一个 | Z | 15 | 200 x 15

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

感谢您的帮助,非常感谢

【问题讨论】:

    标签: sap hana hana-studio


    【解决方案1】:

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

    您可以参考给定的示例,虽然示例是在 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 条件)

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-27
        • 1970-01-01
        • 2012-07-17
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2015-04-15
        相关资源
        最近更新 更多