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!

Calculate Previous Year in same row as Current Year

verde1030Feb 11 2018 — edited Feb 14 2018

Hi Gurus, need your pick your brain please. Below is my scenario(I have data for all years 2015, 2016, 2017 and 2018 but below are just a few example rows to show my requirement)

Dataset:

WITH t

     AS (SELECT TO_DATE ('01/01/2016', 'MM/DD/YYYY') AS book_date, 50 AS CY_RENEWAL_PREMIUM FROM DUAL

         UNION ALL

         SELECT TO_DATE ('01/01/2016', 'MM/DD/YYYY'), 25 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('01/01/2016', 'MM/DD/YYYY'), 50 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('01/01/2017', 'MM/DD/YYYY'), 30 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('01/01/2017', 'MM/DD/YYYY'), 45 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('01/01/2017', 'MM/DD/YYYY'), 30 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('02/01/2016', 'MM/DD/YYYY'), 30 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('02/01/2016', 'MM/DD/YYYY'), 50 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('02/01/2016', 'MM/DD/YYYY'), 40 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('02/01/2017', 'MM/DD/YYYY'), 30 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('02/01/2017', 'MM/DD/YYYY'), 45 FROM DUAL

         UNION ALL

         SELECT TO_DATE ('02/01/2017', 'MM/DD/YYYY'), 35 FROM DUAL)

SELECT book_date, sum(CY_RENEWAL_PREMIUM) FROM t  group by book_date ORDER BY 1

BOOK_DATESUM(CY_RENEWAL_PREMIUM)
01-JAN-16125
01-FEB-16120
01-JAN-17105
01-FEB-17110

https://livesql.oracle.com/apex/f?p=590:1:113999089809507:::::Requirement: My requirement is to get the 2016 numbers in the same row as 2017(For every month). Similarly in my full dataset i need to show 2018,2017 in the same row etc.

Final Data set should look like this: Please note that since there are no 2015 numbers data is NULL , but 2017 and 2016 Premiums are in the same row.  I need these as i have to again calculate CY_Premium/PY_Premium ratios monthwise for all years.

BOOK_DATECY_RENEWAL_PREMIUMBOOK_DATE_PYPY_PREMIUM
01-JAN-1612501-JAN-15 -
01-FEB-1612001-FEB-15 -
01-JAN-1710501-JAN-16125
01-FEB-1711001-FEB-16120

SELECT TO_DATE ('01/01/2016', 'MM/DD/YYYY') AS book_date, 125 AS CY_RENEWAL_PREMIUM, TO_DATE ('01/01/2015', 'MM/DD/YYYY') AS book_date_PY, NULL as PY_PREMIUM from dual

union all

select TO_DATE ('02/01/2016', 'MM/DD/YYYY') AS book_date, 120 AS CY_RENEWAL_PREMIUM, TO_DATE ('02/01/2015', 'MM/DD/YYYY') AS book_date_PY, NULL as PY_PREMIUM from dual

union all

select TO_DATE ('01/01/2017', 'MM/DD/YYYY') AS book_date, 105 AS CY_RENEWAL_PREMIUM, TO_DATE ('01/01/2016', 'MM/DD/YYYY') AS book_date_PY, 125 as PY_PREMIUM from dual

union all

select TO_DATE ('02/01/2017', 'MM/DD/YYYY') AS book_date, 110 AS CY_RENEWAL_PREMIUM, TO_DATE ('02/01/2016', 'MM/DD/YYYY') AS book_date_PY, 120 as PY_PREMIUM  FROM DUAL

Any ideas are appreciated. Please let me know if you need additional details.

Thanks a lot in advance,

B

This post has been answered by verde1030 on Feb 14 2018
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Mar 14 2018
Added on Feb 11 2018
15 comments
3,459 views