有条件地替换 SELECT 中的值
Posted
技术标签:
【中文标题】有条件地替换 SELECT 中的值【英文标题】:Conditionally replacing values in SELECT 【发布时间】:2009-01-30 15:53:18 【问题描述】:我有一个查询返回给定员工的工资成本
SELECT totalhours * staffbaserate AS TotalCost
FROM newrotaRaw
WHERE staffref = @staffref
但是,如果返回值 > 105,我需要做一些额外的数学运算。我需要做的数学运算是,如果值 105 然后我需要做 value * 1.128。
例如:
John Smith 的成本是 90,因此查询应该返回 90
David Smith 的成本为 140,因此查询应返回 157.92
我确信有某种方法可以使用 replace 来让它做我想做的事,但我只使用 replace 进行完全匹配,在这种情况下,replace 取决于值。
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:试试这样的。
SELECT TotalCost =
CASE
WHEN (totalhours * staffbaserate) < 105 THEN (totalhours * staffbaserate)
ELSE (totalhours * staffbaserate) * 1.128
END
FROM newrotaRaw
WHERE staffref = @staffref
【讨论】:
从技术上讲,他的要求是 感谢该tippex,但原始帖子中没有明确定义相等组件。 哦,你是对的。我重新阅读了它,第一次我停在第一个 105 小时后生效的加班奖金。【参考方案2】:SELECT
CASE WHEN totalhours * staffbaserate <= 105 THEN totalhours * staffbaserate
ELSE totalhours * staffbaserate * 1.128 END AS TotalCost
FROM newrotaRaw
WHERE staffref = @staffref
【讨论】:
【参考方案3】:SELECT totalhours * staffbaserate * (CASE WHEN (totalhours * staffbaserate) < 105 THEN 1 ELSE 1.128 END) AS TotalCost
FROM newrotaRaw
WHERE staffref = @staffref
【讨论】:
【参考方案4】:您正在寻找CASE statement。
【讨论】:
以上是关于有条件地替换 SELECT 中的值的主要内容,如果未能解决你的问题,请参考以下文章
使用 dplyr [重复] 有条件地将一列中的值替换为另一列中的值
tidyverse 和 dplyr:根据其他列有条件地替换列中的值
如何有条件地替换Collection中的值,例如replaceIf(Predicate<T>)?