【问题标题】:Combining Count and Round结合计数和回合
【发布时间】:2013-07-22 16:41:51
【问题描述】:

我通过以下方式计算比例假期:

Count(Distinct Case When Workday NOT IN ('Saturday', 'Sunday') 
AND hours > '0' then workday END) * Holidays / 5

我想将该列中的每个值四舍五入到最接近的一半,并发现 SELECT ROUND(2.2 * 2,0) / 2 正在进行四舍五入工作。

现在我只是没有把它放在一起。据我所见, Select Round 表达式给了我一个标量,但我想让我的列中的每个值都被舍入。 Round(上面的表达式, * 2.0) / 2 不起作用(所有红色下划线)。

【问题讨论】:

  • 将该表达式放入派生表(带有别名的子查询),给结果一个别名,然后对结果进行四舍五入。
  • 这个顶级表达还能用吗?看起来括号结束在CASEWHEN...THEN 部分的中间。这是某种扭曲的 SQL 版本的 Duff 设备吗?
  • 你是对的,括号没有被复制。编辑完成。谢谢。

标签: sql tsql count rounding


【解决方案1】:

尝试单独更新?

Count(Distinct Case 
When Workday NOT IN ('Saturday', 'Sunday') 
AND hours > '0' 
then workday 
END) * Holidays / 5 as RoundThis

Update TableName
Set RoundThis = Round(RoundThis * 2.0) / 2

或者使用变量

【讨论】:

    【解决方案2】:

    假设你有一个可以编译的表达式,这应该可以解决问题:

    ROUND( 2 * CAST(/*equation*/ AS DECIMAL), 0) / 2;

    注意:您应该除以5之前转换为十进制。

    编辑:说明在我的系统上有效的功能:

    ROUND(2 * (
      CAST(
        COUNT(Distinct Case When Workday NOT IN ('Saturday', 'Sunday')
        AND hours > '0' then workday END)
      AS DECIMAL) * Holidays / 5
    ), 0) / 2
    

    这是给你一个错误还是只是错误的结果?

    【讨论】:

    • 谢谢。不幸的是,这不起作用,即使我在表达式上单独尝试函数(Round 和 Cast)。
    • @ruedi 使用全列公式更新了答案。
    猜你喜欢
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2018-08-13
    • 1970-01-01
    • 2014-09-28
    • 2015-07-22
    相关资源
    最近更新 更多