计算一个 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 别名使查询更易于编写、阅读和维护
我正在尝试计算迟交作业的百分比。我提出了以下查询:
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 别名使查询更易于编写、阅读和维护