【问题标题】:How to round while using Case and Sum使用大小写和求和时如何舍入
【发布时间】:2014-06-04 22:36:40
【问题描述】:

我有一个 SQL 查询,我在其中提取员工考勤卡信息。它提取姓名、工资单 ID、位置、正常工作时间和加班时间。但是,我无法弄清楚如何使用 case 和 Sum 正确地舍入正常和加班时间。下面是我的代码,不是四舍五入。

SELECT        Employee_Tb.First_Name + ' ' + Employee_Tb.Last_Name AS Name, Employee_Tb.Home_Store_Id, Employee_Tb.Payroll_Id, 
                         CASE WHEN SUM(Payroll_Hours_Tb.Hours_Worked) > 40.0 THEN 40.0 ELSE Round(SUM(Payroll_Hours_Tb.Hours_Worked), 2) END AS RegHours, 
                         CASE WHEN SUM(Payroll_Hours_Tb.Hours_Worked) > 40.0 THEN Round(SUM(Payroll_Hours_Tb.Hours_Worked), 2) - 40.0 ELSE 0.0 END AS OTHours
FROM            Employee_Tb INNER JOIN
                         Payroll_Hours_Tb ON Employee_Tb.Employee_Id = Payroll_Hours_Tb.Employee_Id
WHERE        (Payroll_Hours_Tb.Work_Date BETWEEN @startdate AND @enddate)
GROUP BY Employee_Tb.Payroll_Id, Employee_Tb.First_Name, Employee_Tb.Last_Name, Employee_Tb.Home_Store_Id
ORDER BY Employee_Tb.Home_Store_Id

结果示例如下:常规时间“21.91999999”
应该是:“21.92”

【问题讨论】:

  • 将结果转换为decimal(10, 2) 或您喜欢的任何格式。
  • 这太完美了。如果您想发布它,我会接受它作为答案。谢谢!

标签: sql sql-server


【解决方案1】:

尝试使用

convert(int,Round(SUM(Payroll_Hours_Tb.Hours_Worked), 0))

这将消除多余的整数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2020-06-20
    • 2021-09-30
    相关资源
    最近更新 更多