Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用Case和Sum时如何取整_Sql_Sql Server - Fatal编程技术网

Sql 使用Case和Sum时如何取整

Sql 使用Case和Sum时如何取整,sql,sql-server,Sql,Sql Server,我有一个SQL查询,从中提取员工考勤卡信息。它提取姓名、工资单ID、地点、正常工作时间和加班时间。然而,我不知道如何使用case和Sum正确地舍入正常和加班时间。下面是我的代码,不是四舍五入 SELECT Employee_Tb.First_Name + ' ' + Employee_Tb.Last_Name AS Name, Employee_Tb.Home_Store_Id, Employee_Tb.Payroll_Id, C

我有一个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”

尝试使用

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

这将消除额外的整数

将结果转换为十进制(10,2)或任何您喜欢的格式。这非常完美。如果你想贴出来,我会接受你的回答。非常感谢。