I have a table that is similar to the following below:
id | cat | one_above | top_level |
0 \'printers\' \'
After some fairly extensive digging I stumbled on this page which may or may not contain your answer. It's a difficult in MySQL but from a conceptual point of view I can construct a query that would transpose like this using describe (though it would probably perform horribly). So I'm sure that we can figure out a way to do it the right way.
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.