繁体   English   中英

按日期名称排序在 SQL 中不起作用

[英]Sort by DateName doesn't work in SQL

我正在尝试计算每个员工每月的总工作时间。

以下是我使用的代码:

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(month, Pdate)

有没有办法将monthname转换为monthvalue ,仅用于分组目的? 还是我必须完全更改查询?

只需添加一个 order by 并将附加列添加到结果中(对不起,之前忘记了那部分)。 由于 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)

此查询有效:

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)

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM