我有一个查询要在Ms Access中获取特定报告。这个查询恢复了读取数据的设备的操作,给它" 1/2"这意味着半分钟,或0根据情况,并总结线。
现在我必须在Oracle BD上使用它。除了以下几行之外,我几乎翻译了所有内容:
Inoperante + standby as parado,
出于某种原因,我无法使用他们的名字对我选择的coluns求和。在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')
答案 0 :(得分:3)
无法在SAME选择中引用select中使用的列别名。你要么
作为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