2013-09-25 4 views
0

У меня есть следующие MySQL таблицы:Mysql строк в столбцах

+----+-----+-----+--------+ 
| id | sid | tid | val | 
+----+-----+-----+--------+ 
| 1 | 1 | 1 | square | 
| 2 | 1 | 2 | big | 
| 3 | 1 | 3 | red | 
| 4 | 2 | 1 | circle | 
| 5 | 2 | 2 | small | 
| 6 | 2 | 3 | yellow | 
+----+-----+-----+--------+ 

И я должен был бы запрос, чтобы получить следующие результаты:

+-----+--------+-------+--------+ 
| sid | figure | size | colour | 
+-----+--------+-------+--------+ 
| 1 | square | big | red | 
| 2 | circle | small | yellow | 
+-----+--------+-------+--------+ 

Любые идеи?

Спасибо.

+0

Как вы знаете заголовки столбцов должны быть 'figure',' 'size' и colour'? Это что-то хранится _somewhere_ или вы просто догадываетесь? – Taryn

+0

Заголовки столбцов на самом деле не имеют значения. Благодарю. – cornell

ответ

2

Вы не указали какие-либо сведения о том, как вы определяете имена новых столбцов, но на основе ваших данных. Я предполагаю, что он основан на значениях в столбце tid. Вы можете использовать агрегатную функцию с выражением случая, чтобы получить результат:

select 
    sid, 
    max(case when tid = 1 then val end) figure, 
    max(case when tid = 2 then val end) size, 
    max(case when tid = 3 then val end) color 
from yourtable 
group by sid; 

См SQL Fiddle with Demo

Смежные вопросы