使用单列更改值评估 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
自上而下求值,结果为第一个 WHEN
的 THEN
子句。其他 WHEN
个子句未被评估。
您可以通过将 CASE
中的第一个 WHEN
翻译为 ´if(...)´ ,将所有后续 WHEN
s 翻译为 C# 代码else if(...)
,然后 THEN
到 { return ... }
。
并且如果您嵌套了 if
s,在 C# 中有或没有 else
,您想要将其转换为 CASE ... WHEN
,您也可以嵌套 CASE WHEN
s,一世。 e. WHEN
子句可以包含另一个 CASE ... WHEN
.
我正在尝试将一些在某些数据表中操作数据的 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
自上而下求值,结果为第一个 WHEN
的 THEN
子句。其他 WHEN
个子句未被评估。
您可以通过将 CASE
中的第一个 WHEN
翻译为 ´if(...)´ ,将所有后续 WHEN
s 翻译为 C# 代码else if(...)
,然后 THEN
到 { return ... }
。
并且如果您嵌套了 if
s,在 C# 中有或没有 else
,您想要将其转换为 CASE ... WHEN
,您也可以嵌套 CASE WHEN
s,一世。 e. WHEN
子句可以包含另一个 CASE ... WHEN
.