Reputation: 365
I would like to display the output in Matrix/Pivot format of the following query.
Query :
SELECT
SUBSTR(mon, 4, 6) month,
rmbs_cd,
scdta,
cl_nm,
br_cd,
brd_nm,
prod,
prod_nm,
SUM(sale_net) sales
FROM (SELECT
LAST_DAY(x.deli_dt) mon,
x.rmbs_cd,
x.sc_cd || x.dist_cd || x.tha_cd || x.un_cd || x.cl_id scdta,
INITCAP(cl_nm) cl_nm,
a.br_cd,
brd_nm,
a.cat_cd || a.prd_cd prod,
prod_nm,
sale_cd,
Nvl(sum(a.sale_net) - sum(rt_qty * flat_rt), 0) sale_net
FROM bill_det a, bill_mas x, cl_info c, inv_brand d, inv_prod p
WHERE (a.bill_no = x.bill_no AND a.sc_cd = x.sc_cd)
AND x.fl_mvh IN ('1', '4')
AND x.deli_dt BETWEEN '01-JUL-15' AND '31-DEC-15'
AND a.br_cd = d.br_cd AND d.div_cd = '1'
AND a.typ_cd || a.cat_cd || a.prd_cd = p.typ_cd || p.cat_cd || p.prd_cd
AND p.typ_cd = '09'
AND x.sc_cd = c.sc_cd (+)
AND x.dist_cd = c.dist_cd (+)
AND x.tha_cd = c.tha_cd (+)
AND x.un_cd = c.un_cd (+)
AND x.cl_id = c.cl_id (+)
AND c.div_cd IN ('1', '4')
AND sale_cd IN ('IM', 'IC', 'IN')
AND cancl IS NULL
GROUP BY
LAST_DAY(x.deli_dt),
x.rmbs_cd,
x.sc_cd || x.dist_cd || x.tha_cd || x.un_cd || x.cl_id,
cl_nm,
a.br_cd,
brd_nm,
a.cat_cd || a.prd_cd,
prod_nm,
sale_cd
)
GROUP BY SUBSTR(mon, 4, 6), rmbs_cd, scdta, cl_nm, br_cd, brd_nm, prod, prod_nm
ORDER BY 1, 2, 3
Result :
Expected Output :
I would like to display each individual month in different vertical columns sequentially in Oracle.
Upvotes: 0
Views: 5198
Reputation: 586
Hi
something like this (tested on Oracle 11gr2)? Using Pivot function:
WITH T AS(SELECT 'A' AS PROD, 1 AS VAL, 1 AS myMONTH FROM DUAL UNION ALL SELECT 'A' AS PROD, 20 AS VAL, 2 AS myMONTH FROM DUAL UNION ALL SELECT 'A' AS PROD, 33 AS VAL, 3 AS myMONTH FROM DUAL UNION ALL SELECT 'A' AS PROD, 13 AS VAL, 4 AS myMONTH FROM DUAL UNION ALL SELECT 'B' AS PROD, 3211 AS VAL, 5 AS myMONTH FROM DUAL UNION ALL SELECT 'C' AS PROD, 1 AS VAL, 6 AS myMONTH FROM DUAL UNION ALL SELECT 'D' AS PROD, 1 AS VAL, 7 AS myMONTH FROM DUAL UNION ALL SELECT 'D' AS PROD, 32 AS VAL, 7 AS myMONTH FROM DUAL UNION ALL SELECT 'E' AS PROD, 1 AS VAL, 8 AS myMONTH FROM DUAL UNION ALL SELECT 'B' AS PROD, 1 AS VAL, 9 AS myMONTH FROM DUAL UNION ALL SELECT 'G' AS PROD, 2131 AS VAL, 9 AS myMONTH FROM DUAL UNION ALL SELECT 'A' AS PROD, 1 AS VAL, 10 AS myMONTH FROM DUAL UNION ALL SELECT 'H' AS PROD, 1 AS VAL, 11 AS myMONTH FROM DUAL UNION ALL SELECT 'J' AS PROD, 234 AS VAL, 1 AS myMONTH FROM DUAL UNION ALL SELECT 'J' AS PROD, 432 AS VAL, 3 AS myMONTH FROM DUAL UNION ALL SELECT 'J' AS PROD, 22 AS VAL, 5 AS myMONTH FROM DUAL UNION ALL SELECT 'J' AS PROD, 25546 AS VAL, 5 AS myMONTH FROM DUAL) SELECT * FROM ( SELECT PROD, VAL, MYMONTH FROM T) PIVOT(SUM(VAL) FOR MYMONTH IN (1 AS JAN, 2 AS FEB, 3 AS MAR, 4 AS APR, 5 AS MAY, 6 AS JUN, 7 AS JUL, 8 AS AGO, 9 AS SEPT, 10 AS OCT, 11 AS NOV, 12 AS DIC) ) ORDER BY PROD;
Igor
Upvotes: 1