计算一个 sql 查询占另一个查询的百分比?

Calculate one sql query as the percentage of another?

我正在尝试计算迟交作业的百分比。我提出了以下查询:

SELECT 
COUNT(dbo.Jobs.jmpJobID) AS "Jobs Shipped" 
FROM
 ((dbo.Jobs 
LEFT OUTER JOIN dbo.SalesOrderJobLinks ON dbo.Jobs.jmpJobID = dbo.SalesOrderJobLinks.omjJobID) 
LEFT OUTER JOIN dbo.SalesOrderLines ON dbo.SalesOrderJobLinks.omjSalesOrderID = dbo.SalesOrderLines.omlSalesOrderID AND omjSalesOrderLineID = omlSalesOrderLineID)    
WHERE  dbo.Jobs.jmpCompletedDate  >=  '{%Last Monday Date YYYYMMDD%}' AND dbo.Jobs.jmpCompletedDate  <  '{%Next Saturday Date YYYYMMDD%}'

UNION

SELECT COUNT(dbo.Jobs.jmpJobID) AS "Late Jobs" 
FROM ((dbo.Jobs 
LEFT OUTER JOIN dbo.SalesOrderJobLinks ON dbo.Jobs.jmpJobID = dbo.SalesOrderJobLinks.omjJobID) 
LEFT OUTER JOIN dbo.SalesOrderLines ON dbo.SalesOrderJobLinks.omjSalesOrderID = dbo.SalesOrderLines.omlSalesOrderID AND omjSalesOrderLineID = omlSalesOrderLineID)    
WHERE  dbo.Jobs.jmpCompletedDate  >=  '{%Last Monday Date YYYYMMDD%}' AND dbo.Jobs.jmpCompletedDate  <  '{%Next Saturday Date YYYYMMDD%}' AND dbo.Jobs.jmpCompletedDate  >  dbo.Jobs.jmpProductionDueDate

这 returns 已发货的作业总数和延迟发货的总数在一列中作为单独的行。 例如。 10 件发货,5 件迟交。

关于我如何以百分比的形式做到这一点,得出 50% 的结果有什么想法吗?

非常感谢,感谢任何意见!

您可以进行条件聚合:

SELECT 
    AVG(CASE 
        WHEN j.jmpCompletedDate > j.jmpProductionDueDate THEN 100.0 
        ELSE 0.0 
    END) AS PercentJobsLate 
FROM dbo.Jobs j 
LEFT OUTER JOIN dbo.SalesOrderJobLinks oj 
    ON j.jmpJobID = oj.omjJobID
LEFT OUTER JOIN dbo.SalesOrderLines o 
    ON oj.omjSalesOrderID = o.omlSalesOrderID 
    AND omjSalesOrderLineID = omlSalesOrderLineID    
WHERE  
    j.jmpCompletedDate >= '{%Last Monday Date YYYYMMDD%}' 
    AND j.jmpCompletedDate < '{%Next Saturday Date YYYYMMDD%}'

请注意,我修改了您的查询如下:

  • SQL 服务器中的 JOIN 不需要嵌套括号(只有 ms-access 需要这个)

  • table 别名使查询更易于编写、阅读和维护