我有一个要求,使用属性视图根据条件计算结果,值来自另一行。
如果 KSCHL = Y,则结果将从 KBETR 设置。如果没有,结果将由它自己的KBETR * KBETR从相应的密钥对(MATNR,WERKS(设置。请参阅示例。
MATNR | WERK | KSCHL | KBETR | 预期结果 |
---|---|---|---|---|
01 | A | X | 10200 x 10 | |
01 | A | Y | 200200 | |
01 | A | Z | 15200 x 15 |
另一种选择是使用 SQL First_Value(( 分析函数。
您可以参考给定的示例,尽管该示例在 SQL Server 上,但该函数在 SQLScript 开发人员的 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(( 函数获取按 CASE 语句排序的 KBETR 值(以获取First_Value函数开头的 Y 条件(,用于每个 MATNR,WERK 组合由 Partition By 子句定义
我希望它有所帮助,
此语句的最简单的 SQL 选择将如下所示,包括不使用 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条件类型会发生什么。我假设您确保一次只有一个值。