我正在计算每个员工每月的工作总时数。
以下是我使用的代码:
SELECT
emp_name,
emp_id,
monthval = DATENAME( month, Pdate),
Total_Time = (CAST(SUM(DATEDIFF(MI, In_Punch, Out_Punch))/60 as varchar)
+ ':' + right('00'+ cast(SUM(DATEDIFF(MI, In_Punch, Out_Punch))%60 as varchar), 2))
FROM masterprocessdailydata
WHERE Emp_Id = @EmpID
GROUP BYEmp_Name,Emp_ID, DATENAME(month, Pdate)
除了显示的月份顺序不同之外,它的工作正常。
此查询按字母顺序排列列。
输出
April, December, February, January,July and so on...
预期输出:
January, February, March...
由于我想要月份名称作为输出,我不能使用 - DATEPART(月,Pdate)。
有没有办法将 monthname 转换为 monthvalue ,仅用于分组目的? 或者我必须完全更改查询吗?
答案 0 :(得分:0)
只需添加订单并在结果中添加其他列(抱歉,之前忘记了该部分)。由于DatePart和DateName函数具有相似的一致性,因此不会影响结果的生成方式:
SELECT emp_name, emp_id, Datepart(month, Pdate), monthval = DATENAME( month, Pdate) , Total_Time = (CAST(SUM(DATEDIFF(MI, In_Punch, Out_Punch))/60 as varchar) + ':' + right('00'+ cast(SUM(DATEDIFF(MI, In_Punch, Out_Punch))%60 as varchar), 2))
from masterprocessdailydata
Where Emp_Id = @EmpID
group by Emp_Name,Emp_ID, Datepart(month, Pdate), DATENAME(month, Pdate)
order by Datepart(month, Pdate)
答案 1 :(得分:0)
此查询有效:
SELECT emp_name, emp_id, Datepart(month, Pdate),
monthval = DATENAME( month, Pdate) ,DATENAME( month, Pdate),
Total_Time = (CAST(SUM(DATEDIFF(MI, In_Punch, Out_Punch))/60 as varchar) + ':' + right('00'+ cast(SUM(DATEDIFF(MI, In_Punch, Out_Punch))%60 as varchar), 2))
from masterprocessdailydata
Where Emp_Id = @EmpID
group by Emp_Name,Emp_ID, Datepart(month, Pdate), DATENAME(month, Pdate)
order by Datepart(month, Pdate)
谢谢!