sql - 使用单列更改值评估 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 并选择最后一个 CASE,还是选择评估为 TRUE 的第一个 CASE,这就是该列的情况?如果是后者,我需要弄清楚如何将第一个 IF 语句合并到下面的 CASE WHEN 子句中。
解决方案
CASE
...WHEN
是自上而下评估THEN
的,第一个WHEN
评估为 true 的子句是结果。WHEN
不评估其他子句。
您可以或多或少地将其转换为 C# 代码,方法是将'if(...)' 中的第一个、后面的所有WHEN
s和s转换为。CASE
WHEN
else if(...)
THEN
{ return ... }
如果你有嵌套if
的s,在C#中有或没有else
你想翻译成的CASE ... WHEN
,你也可以嵌套CASE WHEN
s,即一个WHEN
子句可以包含另一个CASE ... WHEN
。
推荐阅读
- reactjs - ReactJS:通用cookie无法读取cookie
- c# - 从 Winforms 应用程序调用 CameraCaptureUI
- python - 在 Python 中编写单行嵌套循环
- pygame - 你如何解决:“AttributeError:'int'对象没有属性'world_shift'”
- continuous-integration - TestCafe:无头模式下无法通过测试
- html - 抓取“加载更多”按钮给出错误 - 无法定位元素
- reactjs - JSX 元素类型“X”不是 JSX 元素的构造函数
- python - 如何始终如一地确定我的 round.random.uniform 有多少位数?
- r - 如何同时向两个方向旋转?
- javascript - TextBox 和 Button 未在一行中以相等的间距对齐