繁体   English   中英

如何对Oracle SQL查询中的列求和?

[英]How to Summing columns in a Oracle SQL Query?

我有一个查询要获取Access女士中的特定报告。 该查询将恢复设备读取数据的操作,将其设置为“ 1/2”(表示半分钟或0,具体取决于情况),并对行进行求和。

现在,我必须在Oracle BD上使用它。 除了以下几行,我几乎翻译了所有内容:

Inoperante + standby as parado,

由于某些原因,我无法使用它们的名称来汇总选择的颜色。 在Oracle中有特定的方法可以做到吗?

整个查询都在这里:(业余,这里,不要笑大声笑)

SELECT 

TO_CHAR(e3timestamp,'DD/MM/YYYY') as Data,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
  (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE
   (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE
(CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN
 (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 0 ELSE 1/2 END)
ELSE
 (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 0 ELSE 1/2 END)
END)
   END)
  END)
 END)
)
AS Operando,

SUM((CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 1/2 ELSE 0 END)) AS TSP,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
  (CASE WHEN ARAUCARIA.Status=0 THEN 1/2 ELSE 0 END)
 ELSE 0 END)
) AS Inoperante,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN
  (CASE WHEN ARAUCARIA.SB=1 THEN 1/2 ELSE 0 END)
 ELSE 0 END)
) AS standby,

--Inoperante + standby as parado,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE
  (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE
   (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE
    (CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN
     (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 1/2 ELSE 0 END)
    ELSE
     (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 1/2 ELSE 0 END)
    END)
   END)
  END)
 END)
) AS Inadequada,

--Operando + TSP + Inadequada + Inoperante + standby as Total

FROM ARAUCARIA

--WHERE ARAUCARIA.E3TIMESTAMP BETWEEN  #<%DateIniMed1%>#  AND  #<%DateFimMed1%>#

GROUP BY TO_CHAR(e3timestamp,'DD/MM/YYYY')

无法在SAME选择中引用在选择中使用的列别名。 你要么必须

  1. 拼出该列的整个公式
  2. 使用子查询
  3. 使用通用表表达式(CTE)

作为CTE:

With CTE AS (
SELECT 

TO_CHAR(e3timestamp,'DD/MM/YYYY') as Data,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
  (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE
   (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE
(CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN
 (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 0 ELSE 1/2 END)
ELSE
 (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 0 ELSE 1/2 END)
END)
   END)
  END)
 END)
)
AS Operando,

SUM((CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 1/2 ELSE 0 END)) AS TSP,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
  (CASE WHEN ARAUCARIA.Status=0 THEN 1/2 ELSE 0 END)
 ELSE 0 END)
) AS Inoperante,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN
  (CASE WHEN ARAUCARIA.SB=1 THEN 1/2 ELSE 0 END)
 ELSE 0 END)
) AS standby,

--Inoperante + standby as parado,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE
  (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE
   (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE
    (CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN
     (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 1/2 ELSE 0 END)
    ELSE
     (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 1/2 ELSE 0 END)
    END)
   END)
  END)
 END)
) AS Inadequada,

--Operando + TSP + Inadequada + Inoperante + standby as Total

FROM ARAUCARIA

--WHERE ARAUCARIA.E3TIMESTAMP BETWEEN  #<%DateIniMed1%>#  AND  #<%DateFimMed1%>#

GROUP BY TO_CHAR(e3timestamp,'DD/MM/YYYY'))

SELECT c.*
     , Inoperante + standby as parado
     , Operando + TSP + Inadequada + Inoperante + standby as Total
FROM cte C

作为子查询:

SELECT c.*
     , Inoperante + standby as parado
     , Operando + TSP + Inadequada + Inoperante + standby as Total
FROM (SELECT TO_CHAR(e3timestamp,'DD/MM/YYYY') as Data,
      SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE 
  (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE
   (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE
(CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN
 (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 0 ELSE 1/2 END)
ELSE
 (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 0 ELSE 1/2 END)
END)
   END)
  END)
 END)
)
AS Operando,

SUM((CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 1/2 ELSE 0 END)) AS TSP,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN 
  (CASE WHEN ARAUCARIA.Status=0 THEN 1/2 ELSE 0 END)
 ELSE 0 END)
) AS Inoperante,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]>50 THEN
  (CASE WHEN ARAUCARIA.SB=1 THEN 1/2 ELSE 0 END)
 ELSE 0 END)
) AS standby,

--Inoperante + standby as parado,

SUM(
 (CASE WHEN ARAUCARIA.[Tempo por Stroke_Quality]<50 THEN 0 ELSE
  (CASE WHEN ARAUCARIA.Status=0 THEN 0 ELSE
   (CASE WHEN ARAUCARIA.SB=1 THEN 0 ELSE
    (CASE WHEN ARAUCARIA.VAZÃO=0 OR ARAUCARIA.VAZÃO=NULL THEN
     (CASE WHEN ARAUCARIA.[Tempo por Stroke]>15 THEN 1/2 ELSE 0 END)
    ELSE
     (CASE WHEN ARAUCARIA.[Quantidade inejtada]<10 THEN 1/2 ELSE 0 END)
    END)
   END)
  END)
 END)
) AS Inadequada,

--Operando + TSP + Inadequada + Inoperante + standby as Total

FROM ARAUCARIA

--WHERE ARAUCARIA.E3TIMESTAMP BETWEEN  #<%DateIniMed1%>#  AND  #<%DateFimMed1%>#

GROUP BY TO_CHAR(e3timestamp,'DD/MM/YYYY')) C

我会让你找出复制公式一:P

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM