使用SQL计算利用率

使用SQL计算利用率,sql,sql-server,Sql,Sql Server,我有下表:- 我需要计算卡车利用率&最终输出应如下所示:- 一,。利用率(每日):- 二,。5月1日至5月3日的平均利用率:44.4% [(33.3%+33.3%+66.7%)/3] iii.5月1日至5月6日的平均利用率:55.6% [(33.3%+33.3%+66.7%+66.7%+66.7%+66.7%)/6] 如何生成上述输出?您可以像这样使用SUM和COUNT DECLARE @SampleDAta AS TABLE ( Truck varchar(10), Sta

我有下表:-

我需要计算卡车利用率&最终输出应如下所示:-

一,。利用率(每日):-

二,。5月1日至5月3日的平均利用率:44.4% [(33.3%+33.3%+66.7%)/3]

iii.5月1日至5月6日的平均利用率:55.6% [(33.3%+33.3%+66.7%+66.7%+66.7%+66.7%)/6]


如何生成上述输出?

您可以像这样使用
SUM
COUNT

DECLARE @SampleDAta AS TABLE
(
    Truck varchar(10),
    Status varchar(10),
    Date date 
)
INSERT INTO @SampleDAta
(
    Truck,
    Status,
    [Date]
)
VALUES
('A', 'OFF', '2017-05-01'),
('A', 'OFF', '2017-05-02'),
('A', 'OFF', '2017-05-03'),
('A', 'OFF', '2017-05-04'),
('A', 'OFF', '2017-05-05'),
('A', 'OFF', '2017-05-06'),
('B', 'ON', '2017-05-01'),
('B', 'ON', '2017-05-02'),
('B', 'ON', '2017-05-03'),
('B', 'ON', '2017-05-04'),
('B', 'ON', '2017-05-05'),
('B', 'ON', '2017-05-06'),
('C', 'OFF', '2017-05-01'),
('C', 'OFF', '2017-05-02'),
('C', 'ON', '2017-05-03'),
('C', 'ON', '2017-05-04'),
('C', 'ON', '2017-05-05'),
('C', 'ON', '2017-05-06')

-- I.
SELECT sd.[Date], 
      CAST(100.00 * SUM(CASE WHEN sd.Status = 'ON' THEN 1 ELSE 0 END)/ COUNT(sd.Truck)  AS decimal(10,2)) AS [Utilisation Rate]  
FROM @SampleDAta sd
GROUP BY sd.[Date]

-- II.
;WITH temp AS 
(
    SELECT sd.[Date], 
      CAST(100.00 * SUM(CASE WHEN sd.Status = 'ON' THEN 1 ELSE 0 END)/ COUNT(sd.Truck)  AS decimal(10,2)) AS [Utilisation Rate]  
    FROM @SampleDAta sd
    GROUP BY sd.[Date]

)
SELECT  
      CAST(SUM(t.[Utilisation Rate])/ COUNT(*) AS decimal(10,2)) AS [Utilisation Rate]  
FROM temp t
WHERE t.[Date] BETWEEN '2017-05-01' AND '2017-05-03'

-- III.
;WITH temp AS 
(
    SELECT sd.[Date], 
      CAST(100.00 * SUM(CASE WHEN sd.Status = 'ON' THEN 1 ELSE 0 END)/ COUNT(sd.Truck)  AS decimal(10,2)) AS [Utilisation Rate]  
    FROM @SampleDAta sd
    GROUP BY sd.[Date]

)
SELECT  
      CAST(SUM(t.[Utilisation Rate])/ COUNT(*) AS decimal(10,2)) AS [Utilisation Rate]  
FROM temp t
WHERE t.[Date] BETWEEN '2017-05-01' AND '2017-05-06'

演示链接:

您尝试过什么吗?这是作业吗?其他人能看到这些图片吗?他们正在为我显示断开的链接。是否有遗漏的日期。如果是,两个日期之间的
平均利用率
应该考虑这个问题吗?第二个和第三个查询可以这样简化