Рассчитать один sql запрос как процент от другого? - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь рассчитать процент работ, отправленных с опозданием. Я пришел к следующему запросу:

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

Это возвращает общее количество отправленных заданий и общее количество отправленных с опозданием в виде отдельных строк в одном столбце. например. 10 отправлены, 5 отправлены поздно.

Любые идеи о том, как я могу сделать это в процентах, с результатом 50%?

Большое спасибо, благодарны за любые комментарии!

1 Ответ

3 голосов
/ 07 января 2020

Вы можете выполнить условное агрегирование:

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%}'

Обратите внимание, что я изменил ваш запрос следующим образом:

  • нет необходимости во вложенных скобках вокруг JOIN s в SQL Сервер (это требуется только для ms-доступа)

  • псевдонимы таблиц облегчают написание, чтение и обслуживание запросов

...