I have this table view
UserName Product NumberPurchaces
-------- ------- ---------------
\'John Doe\' \'Chair\' 4
\'John Doe\' \'
I guess one would have to write some code to dynamically create the query. Each MAX() line is identical except for the 'CHAIR', 'TABLE', etc, strings.
So, one would have to itterate through the data to find all the products and build up a second query as one goes. Then execute that dynamically built query.
Oracle 11g is the first to support PIVOT/UNPIVOT, so you have to use:
SELECT t.username,
MAX(CASE WHEN t.product = 'Chair' THEN t.numberpurchases ELSE NULL END) AS chair,
MAX(CASE WHEN t.product = 'Table' THEN t.numberpurchases ELSE NULL END) AS tbl,
MAX(CASE WHEN t.product = 'Bed' THEN t.numberpurchases ELSE NULL END) AS bed
FROM TABLE t
GROUP BY t.username
You could use DECODE, but CASE has been supported since 9i.