Hur*_*ane 4 t-sql conditional-statements
嗨,我有一些问题
如果某些算法有问题,需要按列检查是否为空或零
这是一张桌子:
col1 col2 col3 col4
1 0 3376 0
2 600 null 14468.5714
3 null 0 0
4 600 3376 null
Run Code Online (Sandbox Code Playgroud)
COALESCE
零“0”值不起作用,case
它太大了
需要意识到其中的一些
, CAST(COALESCE(col2, (col3/7), (col4/30)) as money) col2
, CAST(COALESCE(col3, (col2*7), (col4/30*7))as money) col3
, CAST(COALESCE(col4, (col3/7*30),(col2*30))as money) col4
Run Code Online (Sandbox Code Playgroud)
如何以最快的方式解决这个问题。比X
COALESCE 允许您用特定值替换 NULL,而 NULLIF 将允许您用 NULL 替换特定值。您可以在 0 上使用后者并最终得到如下结果:
, CAST(
COALESCE(
NULLIF(col2, 0),
NULLIF(col3, 0) / 7,
NULLIF(col4, 0) / 30
) AS money
) AS col2
, CAST(
COALESCE(
NULLIF(col3, 0),
NULLIF(col2, 0) * 7,
NULLIF(col4, 0) / 30 * 7)
) AS money
) AS col3
, CAST(
COALESCE(
NULLIF(col4, 0),
NULLIF(col3, 0) / 7 * 30,
NULLIF(col2, 0) * 30
) AS money
) AS col4
Run Code Online (Sandbox Code Playgroud)
如果你问我的话,仍然相当长,但绝对比使用 CASE 短。每个表达式中的最后一个 NULLIF 可能是不必要的,我将它们留在那里以保持一致性。也许您可以添加第四个参数0
,以确保结果永远不会为 NULL。
为什么不直接使用CASE
像这样的条件
CASE WHEN col2 is not null and col2 <> 0 THEN your_calculation
Run Code Online (Sandbox Code Playgroud)