Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Group by a calculated field

user1592128Dec 3 2015 — edited Dec 4 2015

When I run the following query I get returned results:

SELECT REPORT_1_FLOW_PATTERNS_1.CLIENT_NAME, MERCHANT_INFO.RISK_MANAGER, STATS_PREV_28D_2.AVG_CREATED_TRX_NUMBER, CASE WHEN BATCHES=1 AND BATCH_START <= BATCH_STOP AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))>=BATCH_START AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))<=BATCH_STOP OR BATCH_START>BATCH_STOP AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))>=BATCH_START OR TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))<=BATCH_STOP THEN 1 ELSE 0 END AS BATCH, REPORT_1_FLOW_PATTERNS_1.PROCESSING_DATE

FROM MERCHANT_INFO INNER JOIN REPORT_1_FLOW_PATTERNS_1 ON MERCHANT_INFO.CLIENT_ID = REPORT_1_FLOW_PATTERNS_1.CLIENT_ID LEFT JOIN STATS_PREV_28D_2 ON MERCHANT_INFO.CLIENT_ID = STATS_PREV_28D_2.CLIENT_ID

GROUP BY REPORT_1_FLOW_PATTERNS_1.CLIENT_NAME, MERCHANT_INFO.RISK_MANAGER, STATS_PREV_28D_2.AVG_CREATED_TRX_NUMBER, CASE WHEN BATCHES=1 AND BATCH_START <= BATCH_STOP AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))>=BATCH_START AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))<=BATCH_STOP OR BATCH_START>BATCH_STOP AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))>=BATCH_START OR TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))<=BATCH_STOP THEN 1 ELSE 0 END, REPORT_1_FLOW_PATTERNS_1.PROCESSING_DATE;

However, when I get an error when I replace this with:

SELECT REPORT_1_FLOW_PATTERNS_1.CLIENT_NAME, MERCHANT_INFO.RISK_MANAGER, STATS_PREV_28D_2.AVG_CREATED_TRX_NUMBER, CASE WHEN BATCHES=1 AND BATCH_START <= BATCH_STOP AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))>=BATCH_START AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))<=BATCH_STOP OR BATCH_START>BATCH_STOP AND TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))>=BATCH_START OR TO_NUMBER(TO_CHAR(TO_DATE('01-04-2012', 'dd-mm-rr'), 'DD'))<=BATCH_STOP THEN 1 ELSE 0 END AS BATCH, REPORT_1_FLOW_PATTERNS_1.PROCESSING_DATE

FROM MERCHANT_INFO INNER JOIN REPORT_1_FLOW_PATTERNS_1 ON MERCHANT_INFO.CLIENT_ID = REPORT_1_FLOW_PATTERNS_1.CLIENT_ID LEFT JOIN STATS_PREV_28D_2 ON MERCHANT_INFO.CLIENT_ID = STATS_PREV_28D_2.CLIENT_ID

GROUP BY REPORT_1_FLOW_PATTERNS_1.CLIENT_NAME, MERCHANT_INFO.RISK_MANAGER, STATS_PREV_28D_2.AVG_CREATED_TRX_NUMBER, BATCH, REPORT_1_FLOW_PATTERNS_1.PROCESSING_DATE;

The only difference is that I have tried to simply the GROUP BY statement by replacing the calculated field with "BATCHES" (the name of the displayed field). This clearly does not work but I am wondering if there is a way I can simply the query rather than writing the whole calculation again.

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jan 1 2016
Added on Dec 3 2015
6 comments
2,176 views