我有一个计算列,请参见下面的语法。
我想要实现的是这个。如果[Part of Group ?]
中有一段文本,而[ISPG Grouped]
列中有RUBU或CABU,则占[Final]
列的10%。但是我也想说的是,如果[Part of Group ?]
中没有文本,并且[ISPG Grouped]
列中有RUBU,而[Final]
列的值在10,000欧元至34,999之间,则得到[Final]
列的4%
这是我到目前为止的语法
CASE WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="RUBU") THEN [Final] / 100 * 10
WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="CABU") THEN [Final] / 100 * 10
WHEN ([Part of Group ?] ="") AND ([ISPG Grouped]="RUBU") AND [Final] <> 10000 34999 THEN [Final] / 100 * 4
ELSE NULL END
34,999后发生错误,有关更多详细信息,请参见下面的图片1
基本上我不知道如何在两个值之间执行If In,然后执行功能:-)
答案 0 :(得分:2)
“ ... [最终]列的值在10,000欧元和34,999之间...”
您能否将公式的这一部分更改为:
... AND [Final] > 10000 AND [Final] < 34999 THEN ...
如果希望包含在内,请将运算符更改为<=
和>=
,或者分别将数字向下和向上增加1。
答案 1 :(得分:1)
Mark P的答案将解决语法错误,但是您的CASE
逻辑上有缺陷。满足条件后,CASE
表达式将退出。它不会检查其余条件,因此这里的条件 order 很重要。
第一行:WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="RUBU") THEN
将导致对最后一行从不进行评估,因为它包含相同的最小条件,并且将退出。要解决此问题,请交换它们。
CASE
WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="CABU") THEN [Final] / 100 * 10
WHEN ([Part of Group ?] ="") AND ([ISPG Grouped]="RUBU") AND [Final] > 10000 AND [Final] < 34999 THEN [Final] / 100 * 4
WHEN ([Part of Group ?]!="") AND ([ISPG Grouped]="RUBU") THEN [Final] / 100 * 10
ELSE NULL END
正如您在此处看到的那样,第二个条件比第三个条件更具限制性,因此某些情况在此处会失败,但对于第三个情况则为true。
如果将when 1=1 then 1
放在CASE
表达式的顶部,那么您将看到的唯一值是1。类似地,如果将其放在最后……则等于说ELSE 1
,因为地球上1总是等于1:)