I perform simple LEFT JOIN
between two tables:
A:
YR QTR MTH DAY DEPT SALES 2017 2 04 2017-04-01 B xxxxxx 2017 1 03 2017-03-31 A xxxxxxxx 2017 1 03 2017-03-31 B xxxxx 2017 1 03 2017-03-30 A xxxx
Second table (B) I use to bring QTR_ALT
number
YEAR MONTH QTR QTR_ALT 2016 12 4 12 2017 01 1 12 2017 02 1 12 2017 03 1 11 2017 04 2 11
Following LEFT JOIN B ON A.YR = B.YEAR AND A.QTR = B.QTR AND A.MTH=B.MONTH
returns NULL
for QTR_ALT for A.DAY BETWEEN '2016-12-01' AND '2017-03-31'
YR QTR QTR_ALT MTH DAY DEPT SALES 2017 2 11 04 2017-04-02 A xxxxxx 2017 2 11 04 2017-04-01 A xxxxxx 2017 2 11 04 2017-04-01 B xxxxxx 2017 1 NULL 03 2017-03-31 A xxxxxxxx 2017 1 NULL 03 2017-03-31 B xxxxx 2017 1 NULL 03 2017-03-30 A xxxx
I tried moving WHERE
condition to JOIN
but no luck. How is it possible these dates don't get join even though corresponding record exists in table B?
Full code:
SELECT YEAR(A.DAY) as YR, QUARTER(A.DAY) as QTR, B.QTR_ALT, (REPEAT(0, 2-LENGTH(MONTH(A.DAY))) || MONTH(A.DAY)) MTH, A.DAY, A.DEPT, SUM(A.VAL) as SALES FROM A LEFT JOIN (SELECT TO_CHAR(ADD_MONTHS(a.DT, - b.Y), 'YYYY') as YEAR, TO_CHAR(ADD_MONTHS(a.DT, - b.Y), 'MM') as MONTH, CEIL(TO_NUMBER(TO_CHAR(add_months(a.dt, -b.y), 'MM')) / 3) as QTR, CEIL(b.y/3) as QTR_ALT FROM (SELECT TRUNC(CURRENT_DATE, 'MONTH') as DT) a CROSS JOIN (SELECT SEQ8()+1 as Y FROM TABLE(GENERATOR(ROWCOUNT => 36)) ORDER BY 1) b ORDER BY YEAR, MONTH) B ON QUARTER(A.DAY) = B.QTR AND (REPEAT(0, 2-LENGTH(MONTH(A.DAY))) || MONTH(A.DAY)) = B.MONTH WHERE (YEAR(A.DAY) = B.YEAR) AND (A.DAY BETWEEN '2016-12-01' AND '2017-03-31') AND A.DEPT in ('A', 'B') GROUP BY A.DAY, YEAR(A.DAY),QUARTER(A.DAY),B.QTR_ALT,(REPEAT(0, 2-LENGTH(MONTH(A.DAY))) || MONTH(A.DAY)), DEPT ORDER BY A.DAY DESC