Задать вопрос
@iRumba

Как в запросе превратить строки в столбцы?

Есть таблица вида
UserId | Field | Value
Со значениями
1 | Password | 123
1 | EMail | 1@2.ru
2 | Password | qwe
2 | EMail | q@w.e
2 | Name | Sergey

Мне надо составить запросы, чтобы получить:
Все поля для определенного UserId (например =1)
UserId | Password | EMail
1 | 123 | 1@2.ru

Все доступные поля
UserId | Password | EMail | Name
1 | 123 | 1@2.ru | NULL
2 | qwe | q@w.e | Sergey

Присутствуют определенные Fields (например Name)
UserId | Password | EMail | Name
2 | qwe | q@w.e | Sergey
  • Вопрос задан
  • 1126 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@serega_kaktus
Программист-самоучка, фрилансер
SELECT * FROM mytable WHERE UserId=1
SELECT * FROM mytable WHERE 1 GROUP BY UserId
SELECT * FROM mytable WHERE Name IS NOT NULL


PS Вы сразу пришли сюда или хоть как пытались найти инфу в сети?
Ответ написан
То, что у вас есть - это EAV-моделька. То, что вы хотите с ней сделать - превратить в обычное отношение - вполне можно назвать Pivot.
Вот тут SO подоспел с советами, как раз по вашей части, включая MySQL:
stackoverflow.com/questions/8764290/what-is-best-p...
stackoverflow.com/questions/649802/how-to-pivot-a-...
Ответ написан
@UA3MQJ
Что-нибудь типа этого. С Null и агрегатной функцией поэкспериментировать
select max(UserId), max(Password), max(EMail)
(Select Value as UserId, NULL as Password, NULL as EMail  from mytable where Field = 'UserId'
Select NULL, Value, NULL from mytable where Field = 'Password'
Select NULL, NULL, Value from mytable where Field = 'EMail')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы