mysql конвертирует строки в столбцы из одной таблицы динамически

0

У меня таблица имеет данные как

id | qs | ans         
=============
1  | qs1|ans1 
1  | qs2|ans2

Мне нужно получить данные из этой таблицы, как

id | qs1 | qs2 
1  | ans1| ans2

note Я не знаю, сколько строк будет с одним и тем же идентификатором, и я не знаю данных в ячейке qs, поэтому я не могу использовать случай, когда мои данные являются текстом, а не числом

Теги:

1 ответ

1
Лучший ответ
CREATE TABLE qanda
    ('id' int, 'qs' varchar(100), 'ans' varchar(100));

INSERT INTO qanda
    ('id', 'qs', 'ans')
VALUES
    (1, 'qs1', 'ans1'),
    (1, 'qs2', 'ans2'),
    (1, 'qs3', 'ans3'),
    (1, 'qs4', 'ans4'),
    (1, 'qs5', 'ans4'),
    (2, 'qs1', 'ans1'),
    (2, 'qs2', 'ans2'),
    (2, 'qs3', 'ans3'),
    (2, 'qs4', 'ans4');

SELECT GROUP_CONCAT('max(IF(qs=\'',qs,'\', ans, NULL)) AS '','qs',''')
into @query
FROM qanda
where id = 1;

SET @query := concat('select id,',@query,' from qanda where id = 1 group by id');
PREPARE dynamic_statement FROM @query;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;
id | qs1  | qs2  | qs3  | qs4  | qs5 
-: | :--- | :--- | :--- | :--- | :---
 1 | ans1 | ans2 | ans3 | ans4 | ans4

Демо-версия dbfiddle здесь

  • 0
    спасибо вот и все
  • 0
    Пожалуйста, нажмите «Отметку », чтобы принять ответ, либо потому, что он действительно решил вашу проблему, либо был наиболее полезен при поиске решения (примечание: вы можете повторно щелкнуть, чтобы отменить). Принятие ответа означает, что вопрос решен и это экономит время других людей при поиске решений или поиске вопросов для решения. PS: вы получите 2 очка репутации, когда вы принимаете ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню