Convert Table Rows to Columns

SELECT company,

       pay_term_id,

       description,

       day_to,

       MAX(CASE WHEN rn = 1 THEN disc_days_cnt END) AS disc_days_cnt1,

       MAX(CASE WHEN rn = 2 THEN disc_days_cnt END) AS disc_days_cnt2,

       MAX(CASE WHEN rn = 3 THEN disc_days_cnt END) AS disc_days_cnt3,

       MAX(CASE WHEN rn = 1 THEN disc_percent END) AS disc_precent1,

       MAX(CASE WHEN rn = 2 THEN disc_percent END) AS disc_precent2,

       MAX(CASE WHEN rn = 3 THEN disc_percent END) AS disc_precent3

FROM (

    SELECT ptd.company,

           ptd.pay_term_id,

           pte.description,

           pt.day_to,

           ptd.disc_days_cnt,

           ptd.disc_percent,

           ROW_NUMBER() OVER (PARTITION BY ptd.company, ptd.pay_term_id ORDER BY ptd.disc_days_cnt) AS rn

    FROM Payment_Term_Disc ptd

    JOIN PAYMENT_TERM_DETAILS pt

    ON ptd.company = pt.company and ptd.pay_term_id = pt.pay_term_id and ptd.installment_number = pt.installment_number

    JOIN PAYMENT_TERM pte

    ON ptd.company = pte.company and ptd.pay_term_id=pte.pay_term_id

) a

GROUP BY company,pay_term_id, description, day_to

ORDER BY company;

 

Post a Comment

0 Comments