By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table dynamicorders
(
order_date date,
order_total number(8),
name varchar2(100)
);
BEGIN
insert into dynamicorders values( DATE '2021-01-05', 705, 'jhone');
insert into dynamicorders values( DATE '2021-01-15', 715, 'steve');
insert into dynamicorders values( DATE '2021-01-17', 50, 'jhone');
insert into dynamicorders values( DATE '2021-02-09', 802, 'mular');
insert into dynamicorders values( DATE '2021-03-12', 812, 'steve');
insert into dynamicorders values( DATE '2021-03-29', 829, 'steve');
insert into dynamicorders values( DATE '2021-04-03', 903, 'jhone');
insert into dynamicorders values( DATE '2021-04-29', 150, 'steve');
insert into dynamicorders values( DATE '2021-05-19', 100, 'steve');
insert into dynamicorders values( DATE '2022-01-10', 300, 'steve');
insert into dynamicorders values( DATE '2022-01-18', 400, 'mular');
END;
/
1 rows affected
SELECT name,
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-01-01' THEN order_total END) AS "21-Jan",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-02-01' THEN order_total END) AS "21-Feb",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-03-01' THEN order_total END) AS "21-Mar",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-04-01' THEN order_total END) AS "21-Apr",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-05-01' THEN order_total END) AS "21-May",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-06-01' THEN order_total END) AS "21-Jun",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-07-01' THEN order_total END) AS "21-Jul",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-08-01' THEN order_total END) AS "21-Aug",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-09-01' THEN order_total END) AS "21-Sep",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-10-01' THEN order_total END) AS "21-Oct",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-11-01' THEN order_total END) AS "21-Nov",
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2021-12-01' THEN order_total END) AS "21-Dec",
SUM(CASE TRUNC(order_date, 'YY') WHEN DATE '2021-01-01' THEN order_total END) AS TOTAL,
SUM(CASE TRUNC(order_date, 'MM') WHEN DATE '2022-01-01' THEN order_total END) AS "22-Jan"
FROM dynamicorders d
GROUP BY name
NAME | 21-Jan | 21-Feb | 21-Mar | 21-Apr | 21-May | 21-Jun | 21-Jul | 21-Aug | 21-Sep | 21-Oct | 21-Nov | 21-Dec | TOTAL | 22-Jan |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
jhone | 755 | null | null | 903 | null | null | null | null | null | null | null | null | 1658 | null |
steve | 715 | null | 1641 | 150 | 100 | null | null | null | null | null | null | null | 2606 | 300 |
mular | null | 802 | null | null | null | null | null | null | null | null | null | null | 802 | 400 |