【问题标题】:SQL calc percent with independent subquery? union?SQL计算百分比与独立子查询?联盟?
【发布时间】:2018-03-12 01:46:37
【问题描述】:

我有一个查询来获取有缺陷的零件,另外我需要计算一段时间内所有生产零件的百分比值。

我是一个 SQL 菜鸟,但我得到的解决方案不起作用。我有这两个工作查询,我想将它们结合起来计算生产件数的百分比。

我尝试在查询中使用简单的子选择。但随后他只计算包含有缺陷零件的班次数量。我没有得到整个时间跨度的总和。所以我想结合这两个查询。

在此之后我尝试加入和联合,但我只收到错误消息。

我缩短并重新整理了显示的查询,以使其更易于理解。

(Oracle 11gR2)

查询以获取零件

SELECT Production.LineName, Names.DescDefect, Sum(Errors.Rework)
FROM Production, Batchdata, Errors, Names, ShiftData, Shifts
WHERE ...=... and ShiftData.Date=...
GROUP Production.Line, Names.DescDefect
HAVING (Production.LineNumber Like '700_')
ORDER BY ...

结果链接:

LineName   DescDefect  Sum(Errors.Rework)
Line1      Defect1     10
Line1      Defect3     2
Line3      Defect12    5
Line3      Defect53    5

查询零件数量:

SELECT Production.LineName, Sum(Batchdata.Produced)
FROM Production, Batchdata
WHERE ...=... AND ((Production.LineNumber Like '700_') AND (ShiftData.Date=...))
GROUP BY Production.LineName

结果:

LineName   Sum(Batchdata.Produced)
Line1      500
Line3      700

我想要什么:

LineName   DescDefect  Sum(Errors.Rework)   percent
Line1      Defect1     10                   2
Line1      Defect3     2                    0,4
Line3      Defect12    5                    0,7
Line3      Defect53    5                    0,7

【问题讨论】:

    标签: sql oracle join subquery union


    【解决方案1】:

    您可以在select 中使用子查询从视图中获取参与计数(with clause)

    WITH batchd AS
          (SELECT Production.LineName LineName,
                  Sum(Batchdata.Produced) no_of_parts
           FROM Production,
                Batchdata WHERE ...=...
           AND ((Production.LineNumber LIKE '700_')
                AND (ShiftData.Date=...))
           GROUP BY Production.LineName )
        SELECT Production.LineName,
               Names.DescDefect,
               Sum(Errors.Rework),
               (Sum(Errors.Rework) /
                  (SELECT no_of_parts
                   FROM batchd b
                   WHERE b.LineName = Production.LineName)) * 100 percent
        FROM Production,
             Batchdata,
             Errors,
             NAMES,
             ShiftData,
             Shifts WHERE ...=...
        AND ShiftData.Date=...
        GROUP Production.Line,
              Names.DescDefect
        HAVING (Production.LineNumber LIKE '700_')
        ORDER BY ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多