我有一个要求,请使用属性视图根据条件和来自另一行的值来计算结果。
如果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
答案 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条件)
我希望这会有所帮助,