这就是我的原始数据库的样子:
+-------------+----------+---------------------+------+
| StationName | State | Start_time | Time |
+-------------+----------+---------------------+------+
| P3 | Downtime | 2018-02-14 13:57:39 | 83 |
+-------------+----------+---------------------+------+
| P4 | Downtime | 2018-02-14 13:57:39 | 118 |
+-------------+----------+---------------------+------+
| P3 | Downtime | 2018-02-15 06:52:51 | 6 |
+-------------+----------+---------------------+------+
| P4 | Downtime | 2018-02-15 06:52:51 | 11 |
+-------------+----------+---------------------+------+
| P2 | Downtime | 2018-02-15 07:04:16 | 60 |
+-------------+----------+---------------------+------+
| P8 | Downtime | 2018-02-15 07:04:16 | 7 |
+-------------+----------+---------------------+------+
这是我用来实现当前结果的代码:
SELECT * FROM(
SELECT CAST([start_time] as DATE) AS [DATE],
State,
Sum(Time) AS Downtime,
STATIONNAME
FROM A6K_Events
Where StationName Like 'P%' AND State='Downtime' AND (Dep != 'Event Log
Error' OR Dep IS NULL)
GROUP BY [start_time],STATIONNAME, State
) AS S
PIVOT (sum(Downtime) FOR STATIONNAME IN([P1],[P2],[P3],[P4],[P5],[P6],[P7],
[P8],[P9],[P10])) AS PT
我目前的结果是:
+------------+----------+------+------+----+-----+------+------+------+------+------+------+
| DATE | State | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P10 |
+------------+----------+------+------+----+-----+------+------+------+------+------+------+
| 2018-02-14 | Downtime | NULL | NULL | 83 | 118 | NULL | NULL | NULL | NULL | NULL | NULL |
+------------+----------+------+------+----+-----+------+------+------+------+------+------+
| 2018-02-15 | Downtime | NULL | 60 | 6 | 11 | NULL | NULL | NULL | 7 | NULL | NULL |
+------------+----------+------+------+----+-----+------+------+------+------+------+------+
我尝试了许多不同的位置和方法将其转换为分秒。我最终遇到了一系列错误,我不确定我做错了什么。我用于将秒转换为小时分钟秒的方法如下。我不确定这是否与我正在使用的格式不兼容,或者我是否将其放在正确的位置或现在。下面这个 Convert 函数中的列引用也可能不准确。
(CONVERT(varchar(6), sum(time)/3600) + ':' +
RIGHT('0' + CONVERT(varchar(2), (sum(time) % 3600) / 60), 2)+ ':' +
RIGHT('0' + CONVERT(varchar(2), sum(time) % 60), 2)) AS DowntimeMinSec,
有谁知道实现我的目标的好方法,即以小时分钟秒为单位显示每个进程每天的停机时间总和?我的“当前结果”粘贴文本表正是我需要的,只是总和不是秒格式。任何帮助我将不胜感激,谢谢。
编辑:这被标记为与旋转无关的帖子的副本。这篇文章是关于在使用枢轴时进行适当转换,而不仅仅是一般地转换时间。我的帖子也不包含与毫秒有关的任何内容。如果这被标记为不重复,我将不胜感激,因为这是一种不同的情况,我在已经理解这篇文章被标记为重复的概念的同时苦苦挣扎。
我的预期输出是我当前的结果,但在 H:mm:ss
为先生编辑。标签:使用他标记为我的副本的帖子中的方法重做尝试和错误
1
SELECT CONVERT(varchar, DATEADD(ms, sum(downtime), 0), 108), * FROM(
SELECT CAST([start_time] as DATE) AS [DATE],
State,
Sum(Time) AS Downtime,
STATIONNAME
FROM A6K_Events
Where StationName Like 'P%' AND State='Downtime' AND (Dep != 'Event Log
Error' OR Dep IS NULL)
GROUP BY [start_time],STATIONNAME, State
) AS S
PIVOT (sum(Downtime) FOR STATIONNAME IN([P1],[P2],[P3],[P4],[P5],[P6],[P7],
[P8],[P9],[P10])) AS PT
GatewayException: Invalid column name 'downtime'.
caused by SQLServerException: Invalid column name 'downtime'.
2
SELECT * FROM(
SELECT CAST([start_time] as DATE) AS [DATE],
State,
Sum(Time) AS Downtime,
STATIONNAME
FROM A6K_Events
Where StationName Like 'P%' AND State='Downtime' AND (Dep != 'Event Log
Error' OR Dep IS NULL)
GROUP BY [start_time],STATIONNAME, State
) AS S
PIVOT (CONVERT(varchar, DATEADD(ms, sum(downtime), 0), 108)) FOR STATIONNAME
IN([P1],[P2],[P3],[P4],[P5],[P6],[P7],[P8],[P9],[P10])) AS PT
GatewayException: Incorrect syntax near the keyword 'CONVERT'.
caused by SQLServerException: Incorrect syntax near the keyword 'CONVERT'.
3
SELECT CONVERT(varchar, DATEADD(ms, sum(time), 0), 108), * FROM(
SELECT CAST([start_time] as DATE) AS [DATE],
State,
Sum(Time) AS Downtime,
STATIONNAME
FROM A6K_Events
Where StationName Like 'P%' AND State='Downtime' AND (Dep != 'Event Log
Error' OR Dep IS NULL)
GROUP BY [start_time],STATIONNAME, State
) AS S
PIVOT (sum(Downtime) FOR STATIONNAME IN([P1],[P2],[P3],[P4],[P5],[P6],[P7],
[P8],[P9],[P10])) AS PT
GatewayException: Invalid column name 'time'.
caused by SQLServerException: Invalid column name 'time'.
