Fabrica a record in PL/PGSQL

From: Eric E <whalesuit(at)bonbon(dot)net>
To: pgsql-general(at)postgresql(dot)org
Subject: Fabrica a record in PL/PGSQL
Date: 2005-05-19 22:36:16
Message-ID: 428D14E0.9090208@bonbon.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi all,
I'm trying to write a function that takes the following records

| Field1 | Field2 | Field3 | Field 4
| A | P | Name1 | 51
| A | P | Name2 | 20.143
| A | P | Name3 | 32.7
| A | P | Name4 | 5.22
| A | P | Name5 | 14.34
| A | Q | Name2 | 1.111
| A | Q | Name7 | 9.712
| A | Q | Name3 | 2.33
| A | Q | Name1 | 77
| B | P | Name1 | 75
| B | P | Name4 | 2.66
| B | P | Name5 | 2.63

And turn it into:
| Field1 | Field 2 | 1st | 2nd
| 3rd | 4th |
5th |
| A | P | Name1: 51 | Name3: 32.7 |
Name2: 20.143 | Name5: 14.34 | Name4: 5.22 |
| A | Q | Name1: 77 | Name7: 9.712 |
Name3: 2.33 | Name2: 1.111 | Null |
| B | P | Name1: 75 | Name4: 2.66 |
Name5: 2.63 | Null | Null |

etc.

Sort of like a crosstab query, but populating the columns in order of
the value in Field 4 and then concatenating with Field3

My approach to writing this function would be as below, but I can't
figure out how to do the bread and butter of the function: assign the
values into fields according to their order. Any help or ideas would be
greatly appreciated.

Many thanks,

Eric

CREATE FUNCTION sorta-crosstab RETURNS setof RECORD AS
DECLARE
crFields CURSOR FOR SELECT Field1,Field2,Field3,Field4 FROM table1
ORDER BY field1 ASC, field2 ASC, field4 DESC;
rwFields table1%ROWTYPE;
rcResults RECORD;

BEGIN
OPEN crFields
LOOP -- over rows
FETCH crFields INTO rwFields;
EXIT WHEN NOT FOUND
IF ... THEN - Loop over equal values of Field1 and Field2
-- Add to rcResults field for "1st","2nd", "3rd", etc. \ These
are what I don't know how to do!
-- Assign value to field "1st","2nd","3rd",etc. /
ELSE
RETURN NEXT;
END;
END LOOP;
RETURN;
END;

Browse pgsql-general by date

  From Date Subject
Next Message Hrishikesh Deshmukh 2005-05-19 22:58:07 bulk loader
Previous Message Dann Corbit 2005-05-19 21:52:08 Re: numeric precision when raising one numeric to another.