I am new to PostgreSQL.
id | customer_id | form_id | field_id | field_name | form_submission_id |    value     |
---+-------------+---------+----------+------------+--------------------+--------------+
 1 |           2 |       7 | c313     | Program    |                  1 | 2013         |            
 2 |           2 |       7 | c313     | Program    |                  2 | PIP          |            
 3 |           2 |       7 | c313     | Program    |                  3 | CIP          |            
 4 |           2 |       7 | c343     | Broker     |                  1 | broker test  |
 5 |           2 |       7 | c343     | Broker     |                  2 | broker test1 |            
 6 |           2 |       7 | c343     | Broker     |                  3 | broker test2 |            
 7 |           2 |       7 | c339     | Class      |                  1 | Class test   |             
 8 |           2 |       7 | c339     | Class      |                  2 | Class test1  |            
 9 |           2 |       7 | c339     | Class      |                  3 | Class test2  |    
I want such record as
customer_id form_id Program      Broker        Class        form_submission_id 
  2          7        2013       broker test   Class test        1
  2          7        PIP        broker test1  Class test1       1
  2          7        CIP        broker test2  Class test3       1
field_name value will be dynamic, not fixed value.
I have try this but getting errors like 'ERROR: return and sql tuple descriptions are incompatible'
select * from crosstab (
    'select Distinct customer_id ,form_id , field_name from form_submissions_reports '
    )
    as newtable (
     customer_id integer,form_id integer,field_id1 varchar,field_id2 varchar,field_id3 varchar
    ); 
But Important it field name is dynamic.
 
     
    