2012-03-11 3 views
0

У меня есть таблица вроде этого:Транспонирование MySQL ключ-значение таблицы

+------+---------+-------------+------+ 
| id | key  | value  | user | 
+------+---------+-------------+------+ 
| 1 | first | foo   | 32 | 
| 2 | second | bar   | 32 | 
| 3 | system | more  | 32 | 
| 4 | first | galaxy  | 21 | 
| 5 | second | foo   | 45 | 
| 6 | system | other  | 45 | 
+------+---------+-------------+------+ 

и мне нужно, чтобы превратить это в:

+-----------+------------+---------+------+ 
| first  | second  | system | user | 
+-----------+------------+---------+------+ 
| foo  | bar  | more | 32 | 
| galaxy | NULL  | NULL | 21 | 
| NULL | foo  | other | 45 | 
+-----------+------------+---------+------+ 

Он ID не используется, ключевые столбцы быть преобразованными в столбцы, результаты будут сгруппированы пользователем, а не существующие значения будут установлены в NULL. Это возможно?

EDIT: Я забыл сказать, что ключевые параметры являются динамическими, не известны заранее.

ответ

0

Попробуйте этот запрос:

INSERT INTO transposed_table (first, second, system, user) 
SELECT t1.value, t2.value, t3.value, t1.user 
FROM initial_table as t1 
OUTER_JOIN initial_table as t2 ON t2.user = t1.user 
OUTER_JOIN initial_table as t3 ON t3.user = t2.user; 

Где я называю transposed_table недавно целевой таблицы и initial_table один у вас уже есть.

+0

Проблема с этим запросом заключается в том, что вы должны заранее знать ключи. Номер и имя ключей неизвестны. – Ivan

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