使用单列更改值评估 CASE/WHEN

Evaluation of CASE/WHEN with single column changing values

我正在尝试将一些在某些数据表中操作数据的 C# 脚本转换为完成相同操作的 SQL (Presto DB) 脚本。

C# 代码通常会根据脚本中的不同条件更改列的值。我无法在 SQL 中完成相同的任务,因为 C# 是程序化的,而 SQL 是单个事务。

SELECT
    IF(("ColumnA" = 'BS'), IF(("ColumnB" = '76'), "ColumnD", '2850'), '2850') "Result"
, CASE 
        WHEN ((("ColumnC" = 'IS') AND (("ColumnB" LIKE '125%') OR ("ColumnB" LIKE '126%'))) AND (CAST("ColumnD" AS Decimal(18,2)) < 2999)) THEN '2850' 
        WHEN ("ColumnC" = 'IS') AND (("ColumnB" LIKE '1%') OR ("ColumnB" LIKE '3%')) AND (CAST("ColumnD" AS Decimal(18,2)) = 2351) THEN '2351'
        WHEN ("ColumnC" = 'IS') AND (("ColumnB" LIKE '1%') OR ("ColumnB" LIKE '3%')) AND (CAST("ColumnD" AS Decimal(18,2)) = 2202) THEN '2202' 
        WHEN ("ColumnB" = '125999') THEN '2351' 
        WHEN ("ColumnB" = '126240') OR ("ColumnB" = '126245') THEN '2202' 
        WHEN ("ColumnB" = '125998') THEN '2351' 
        WHEN ("ColumnB" = '125997') THEN '2351'
    END
    ) "Result"

在 CASE .. WHEN 子句中,将评估所有 CASE 并选择最后一个,还是选择评估为 TRUE 的第一个 CASE,这就是该列?如果是后者,我将需要弄清楚如何将第一个 IF 语句合并到以下 CASE WHEN 子句中。

CASE... WHEN 自上而下求值,结果为第一个 WHENTHEN 子句。其他 WHEN 个子句未被评估。

您可以通过将 CASE 中的第一个 WHEN 翻译为 ´if(...)´ ,将所有后续 WHENs 翻译为 C# 代码else if(...),然后 THEN{ return ... }

并且如果您嵌套了 ifs,在 C# 中有或没有 else,您想要将其转换为 CASE ... WHEN,您也可以嵌套 CASE WHENs,一世。 e. WHEN 子句可以包含另一个 CASE ... WHEN.