请帮忙。这里有一点问题,需要一些帮助来解决它。我有一个返回多行的查询,当我尝试格式化时间以按照我的意愿显示时,我收到以下消息...
消息 130,级别 15,状态 1,第 3 行 无法对包含聚合或子查询的表达式执行聚合函数。
这是我收到错误时使用的格式...
CAST(SUM(DATEDIFF(second, 0, EntryTime)) / 3600 AS varchar(12)) + ':' +
RIGHT('0' + CAST(SUM(DATEDIFF(second, 0, EntryTime)) / 60 % 60 AS varchar(2)), 2) + ':' +
RIGHT('0' + CAST(SUM(DATEDIFF(second, 0, EntryTime)) % 60 AS varchar(2)), 2)
当我在查询中运行它时,我得到了我想要的正确格式......
Project Name Total Time
AAA 0:00:19
BBB 0:00:04
CCC 6:00:06
DDD 16:05:52
但是,我似乎不知道如何格式化以下查询以这种方式显示时间......
SELECT ProjName AS 'Project Name',
CONVERT(VARCHAR(10), SUM(CASE WHEN Phone = 0 AND Research = 0
THEN (DATEDIFF(SECOND, 0, EntryTime))
END)) AS [Total Time No PMRE],
CONVERT(VARCHAR(10), SUM(CASE WHEN Phone = 1 AND Research = 0
THEN (DATEDIFF(SECOND, 0, EntryTime))
END)) AS [Total Time Phone],
CONVERT(VARCHAR(10), SUM(CASE WHEN Phone = 0 AND Research = 1
THEN (DATEDIFF(SECOND, 0, EntryTime))
END)) AS [Total Time Research],
CONVERT(VARCHAR(10), SUM(DATEDIFF(SECOND, 0, EntryTime)) ) AS 'Total Time'
FROM WorkTime
WHERE EntryTime IS NOT NULL
GROUP BY ProjName
并得到以下结果...
Project Name Total Time No PMRE Total Time Phone Total Time Research Total Time
AAA 19 NULL NULL 19
BBB 4 NULL NULL 4
CCC 10800 7200 3606 21606
DDD 57952 NULL NULL 57952
所有这些都是正确的,但我需要帮助弄清楚如何将时间格式化为小时:分钟:秒...实际上,我不需要秒,只需要小时和分钟,但有任何建议,帮助,指向正确的方向将是美妙的。谢谢!
最佳答案
尝试:
with cte as
(SELECT ProjName ,
SUM(CASE WHEN Phone = 0 AND Research = 0 THEN DATEDIFF(SECOND, 0, EntryTime) END) AS [Total Time No PMRE],
SUM(CASE WHEN Phone = 1 AND Research = 0 THEN DATEDIFF(SECOND, 0, EntryTime) END) AS [Total Time Phone],
SUM(CASE WHEN Phone = 0 AND Research = 1 THEN DATEDIFF(SECOND, 0, EntryTime) END) AS [Total Time Research],
SUM(DATEDIFF(SECOND, 0, EntryTime)) AS [Total Time]
FROM WorkTime
WHERE EntryTime IS NOT NULL
GROUP BY ProjName)
SELECT ProjName AS [Project Name],
CAST([Total Time No PMRE] / 3600 AS varchar(12)) + ':'
+ RIGHT('0' + CAST([Total Time No PMRE] / 60 % 60 AS varchar(2)), 2) + ':'
+ RIGHT('0' + CAST([Total Time No PMRE] % 60 AS varchar(2)), 2) AS [Total Time No PMRE],
CAST([Total Time Phone] / 3600 AS varchar(12)) + ':'
+ RIGHT('0' + CAST([Total Time Phone] / 60 % 60 AS varchar(2)), 2) + ':'
+ RIGHT('0' + CAST([Total Time Phone] % 60 AS varchar(2)), 2) AS [Total Time Phone],
CAST([Total Time Research] / 3600 AS varchar(12)) + ':'
+ RIGHT('0' + CAST([Total Time Research] / 60 % 60 AS varchar(2)), 2) + ':'
+ RIGHT('0' + CAST([Total Time Research] % 60 AS varchar(2)), 2) AS [Total Time Research],
CAST([Total Time] / 3600 AS varchar(12)) + ':'
+ RIGHT('0' + CAST([Total Time] / 60 % 60 AS varchar(2)), 2) + ':'
+ RIGHT('0' + CAST([Total Time] % 60 AS varchar(2)), 2) AS [Total Time]
FROM cte
关于SQL如何格式化包含聚合或子查询的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16547665/