Reputation: 88
I had a query to get a specific report in Ms Access. This query resumes the operation of a equipament reading the data, giving it "1/2" which means half a minute, or 0 depending the situation, and summing the lines.
Now I have to use it on Oracle BD. I did translate almost everyting except for the following line:
Inoperante + standby as parado,
For some reason I can't sum the coluns that I have selected using their names. Is there a specific way to do it in Oracle?
There is the entire Query: (Amateur here, don't laugh lol)
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')
Upvotes: 0
Views: 76
Reputation: 35343
One can not reference the columns alias used in a select in the SAME select. You either have to
as a 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
as a subquery:
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
I'll let you figure out the replicating the formula one :P
Upvotes: 2