如何解决计算发货时间超过X天的订单百分比的更好方法?
我正在编写一个T-SQL查询来计算发货时间超过X天的订单百分比。
我现在拥有的东西可以工作,但是感觉很笨拙,我一直在寻求提高我的查询编写技能。
第一个CTE从某个时间范围获得总订单。第二个CTE收到任何发货日期比订单日期早3天(或更短)的订单。
;WITH TotalOrders
AS (
SELECT COUNT(*) AS TotalOrders,MONTH(OrderDate) AS Month,YEAR(OrderDate) AS Year
FROM Orders
WHERE OrderDate >= '2020-05-01'
GROUP BY MONTH(OrderDate),YEAR(OrderDate)
),Under3
AS (
SELECT COUNT(*) AS Under3Days,YEAR(OrderDate) AS Year
FROM SorMaster SM
WHERE OrderDate >= '2020-05-01'
AND DATEDIFF(D,OrderDate,ShipDate) <= 3
GROUP BY MONTH(OrderDate),YEAR(OrderDate)
)
SELECT ROUND(Under3Days * 100.0 / TPO.TotalOrders,1) AS 'PercentOfTotal',TPO.Month,TPO.Year
FROM Under3
JOIN TotalOrders TPO
ON TPO.Month = Under3.Month
AND TPO.Year = Under3.Year
我知道我也可以在临时表中执行此操作,但想知道在进行这些计算时是否有最佳实践可以遵循
解决方法
您可以使用条件聚合:
SELECT
ROUND(AVG(CASE WHEN ShipDate <= DATEADD(day,3,OrderDate) THEN 100.0 ELSE 0 END),1) AS PercentOfTotal,MONTH(OrderDate) AS Month,YEAR(OrderDate) AS Year
FROM Orders
WHERE OrderDate >= '2020-05-01'
GROUP BY MONTH(OrderDate),YEAR(OrderDate)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。