有条件地替换 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 [重复] 有条件地将一列中的值替换为另一列中的值

用 D 列中的值有条件地替换 A、B、C 列中的值

tidyverse 和 dplyr:根据其他列有条件地替换列中的值

如何有条件地替换Collection中的值,例如replaceIf(Predicate<T>)?

如何在pySpark中有条件地替换值并将替换后的值用于下一个条件

有条件地显示具有匹配值的单元格的行中的值