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!

pivot in PL/SQL with dynamic columns

LotsVivJun 27 2018 — edited Jul 5 2018

Hi I have a query like this that I need to turn it into a function or stored procedure.  Passing into one parameter for the date used in the query.

Later I will be calling either the SP or Function from Apex to create either interactive report or classic report.

Thank you

COLUMN  m1_col   NEW_VALUE  m1
COLUMN  m2_col   NEW_VALUE  m2
COLUMN  m3_col   NEW_VALUE  m3
COLUMN  m4_col   NEW_VALUE  m4
COLUMN  m5_col   NEW_VALUE  m5
COLUMN  m6_col   NEW_VALUE  m6
COLUMN  m7_col   NEW_VALUE  m7
COLUMN  m8_col   NEW_VALUE  m8
COLUMN  m9_col   NEW_VALUE  m9
COLUMN  m10_col   NEW_VALUE  m10
COLUMN  m11_col   NEW_VALUE  m11
COLUMN  m12_col  NEW_VALUE  m12

set define on

with months_to_pivot AS 

SELECT LEVEL  AS num, TO_CHAR ( ADD_MONTHS ( to_date('01/01/2018', 'mm/dd/yyyy'), LEVEL - 1) , 'MON_YY'  )  AS str
    FROM    dual
    CONNECT BY  LEVEL <= 12
)
SELECT * 
FROM months_to_pivot 
PIVOT ( MIN (str) 
FOR num IN ( 
     1  AS m1_col
        ,  2  AS m2_col
        ,  3  AS m3_col
        ,  4  AS m4_col
         ,  5  AS m5_col
          ,  6  AS m6_col
           ,  7  AS m7_col
            ,  8  AS m8_col
             ,  9  AS m9_col
              ,  10  AS m10_col
               ,  11  AS m11_col
        , 12  AS m12_col
)  );
--create or replace view contract_detail_monthly
--AS
WITH    data_to_pivot    AS
(
    SELECT CP_CONTRACT.ENT_OWNER,
                 PIPELINE.SHORT_NAME         AS PIPELINE,
                xx
               FROM PIPELINE,
            xx
                    AND CP_CONTRACT.end_date >=  TO_DATE ('01/01/2018', 'mm/dd/yyyy')
                    )
SELECT    *
FROM      data_to_pivot
PIVOT    (    SUM (mth_mdq)
          FOR  col_num  IN ( 
     1  AS &m1
     ,  2  AS &m2
     ,  3  AS &m3
     ,  4  AS &m4
     ,  5  AS &m5
     ,  6  AS &m6
     ,  7  AS &m7
     ,  8  AS &m8
     ,  9  AS &m9
     ,  10  AS &m10
     ,  11 AS &m11
     , 12  AS &m12
        )
   )
ORDER BY  1;

This post has been answered by Etbin on Jul 3 2018
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 2 2018
Added on Jun 27 2018
32 comments
4,667 views