What is the best and simplets way to save two values from two different select statements?
I have a query that’s like this:
SELECT * FROM (
SELECT FIELD1 FROM (<SUB SELECT STATMENT>)
UNION ALL
SELECT FIELD2 FROM (<SUB SELECT STATMENT>))
What I’d like is to save the value from FIELD1 and FIELD2 so later I can do some calulation with it, such as FIELD1 / FIELD2. I tried using a cursor but ran into issues. And it’s too complicated for select statement. Any suggestions?
UPDATE:
The result set from my current query looks like this.
SUM_OF_MESSAGES | LABEL
----------------------------
145323 | PUSHED
2633267 | RECEIVED
|
I’d like to take the values from the first two rows and divide them. Eg. 145323 / 2633267
In other words, is there a way to divide FIELD1 by FIELD2 from my above query?
ANOTHER UPDATE:
Here is my query:
SELECT SUM(R.MESSAGES) AS SUM_OF_MESSAGES, CASE WHEN R.LABEL = 1 THEN 'PUSHED' WHEN R.LABEL = 2 THEN 'RECEIVED' END AS LABEL FROM (
SELECT SUM(Q.MESSAGES) AS "MESSAGES", 1 LABEL FROM (
SELECT USER_LOGIN,
EVENT_MSG,
ROW_LST_UPD_TS,
COMPONENT_NAME,
REGEXP_SUBSTR (SUBSTR (EVENT_MSG, INSTR (EVENT_MSG, ' ', 1, 1), INSTR (EVENT_MSG, ' ', 1, 1)), '[0-9]+') AS "MESSAGES"
FROM EVENT_MGT.EVENT_LOG
WHERE ROW_LST_UPD_TS BETWEEN (TRUNC (:DATEINPUT) - 1) + 5 / 86400 AND (TRUNC (:DATEINPUT)) + 5 / 86400
AND EVENT_ID = 101
AND COMPONENT_NAME LIKE '%Web ICE Downloader.exe%'
GROUP BY COMPONENT_NAME,
USER_LOGIN,
EVENT_MSG,
ROW_LST_UPD_TS
ORDER BY ROW_LST_UPD_TS ) Q
UNION ALL
SELECT SUM(Q.MESSAGES) "MESSAGES", 2 LABEL FROM (
SELECT USER_LOGIN,
EVENT_MSG,
ROW_LST_UPD_TS,
COMPONENT_NAME,
REGEXP_SUBSTR (SUBSTR (EVENT_MSG, INSTR (EVENT_MSG, ' ', 1, 1), INSTR (EVENT_MSG, ' ', 1, 1)), '[0-9]+') AS "MESSAGES"
FROM EVENT_MGT.EVENT_LOG
WHERE ROW_LST_UPD_TS BETWEEN (TRUNC (:DATEINPUT) - 1) + 5 / 86400 AND (TRUNC (:DATEINPUT)) + 5 / 86400
AND EVENT_ID = 100
AND COMPONENT_NAME LIKE '%Web ICE Downloader.exe%'
GROUP BY COMPONENT_NAME,
USER_LOGIN,
EVENT_MSG,
ROW_LST_UPD_TS
ORDER BY ROW_LST_UPD_TS ) Q ) R
GROUP BY R.LABEL
Here is my result set:
SUM_OF_MESSAGES | LABEL
----------------------------
145323 | PUSHED
2633267 | RECEIVED
|
I’d like to divide the two numbers in the same select statement. Please help.
It seems like you would only need one query with a bit of logic in your aggregates
Alternately, you could do something like this with analytic functions (you’d want to replace the subquery
tin my query with the query you’ve written that produces the two rows of output)