I have a table that is similar to the following below:
id | cat | one_above | top_level |
0 \'printers\' \'
I got this out of the book The Art of SQL, pages 284-286:
Let's say your table name is foo.
First, create a table called pivot:
CREATE Table pivot (
count int
);
Insert into that tables as many rows as there are columns that you want to pivot in foo. Since you have three columns in foo that you want to pivot, create three rows in the pivot table:
insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
Now do a Cartesian join between foo and pivot, using a CASE to select the correct column based on the count:
SELECT foo.id, Case pivot.count
When 1 Then cat
When 2 Then one_above
When 3 Then top_level
End Case
FROM foo JOIN pivot;
This should give you what you want.