查询以返回每个字段等于真值的时间量

时间:2018-04-22 23:04:25

标签: sql sql-server

我正在收集数据并存储在SQL Server中。该表由下面的示例表中显示的数据组成。我需要显示每个字段[Fault0-Fault10]处于故障状态的时间量。对于字段值,故障状态表示为1。

Example Table

我使用了以下查询并获得了所需的结果。但是这只适用于一个领域。我需要在一个查询中拥有每个字段的总时间。我有问题将所有字段都拉到一个查询中。

SELECT
      Distinct [Fault0]
      ,datediff(mi, min(DateAndTime), max(DateAndTime))  TotalTimeInMins
 FROM [dbo].[Fault]
 Where Fault0 =1
 group by [Fault0]

结果

enter image description here

1 个答案:

答案 0 :(得分:1)

假设你想要max() - min(),那么你只需要取消数据的转移。您的查询可能如下所示:

SELECT v.faultname, 
       datediff(minute, min(t.DateAndTime), max(t.DateAndTime)) as TotalTimeInMins
FROM [dbo].[Fault] f CROSS APPLY
     (VALUES ('fault0', fault0), ('fault1', fault1), . . ., ('fault10', fault10)
     ) v(faultname, value)
WHERE v.value = 1
GROUP BY v.faultname;