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

Можно ли в MySQL развернуть колонку в строку?

Добрый день.

Есть таблица вида:
Object | Field | Value
1      | foo   | ...
1      | bar   | ...
1      | baz   | ...
2      | foo   | ...
2      | bar   | ...
2      | qux   | ...
3      | ...   | ...
...


Можно ли сделать из неё выборку по заранее известному списку Field-ов (например, только foo, bar, baz, игнорируя qux), развернув при этом в строку, чтобы получилось примерно так:
Object | foo | bar | baz
1      | ... | ... | ...
2      | ... | ... | null
3      | ... | ... | ...


Очевидный вариант с джоинами по понятным причинам мне не нравится. Есть ли ещё какие-нибудь?

SELECT 
table.Object,
f1.Value as foo,
f2.Value as bar,
...
FROM table
LEFT JOIN table as f1 ON (f1.Object = table.Object and f1.Name='foo')
LEFT JOIN table as f2 ON (f2.Object = table.Object and f2.Name='bar')
  • Вопрос задан
  • 338 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
SELECT
    Object,
    MAX(CASE WHEN Field = 'foo' THEN Value ELSE NULL END) AS foo,
    MAX(CASE WHEN Field = 'bar' THEN Value ELSE NULL END) AS bar,
    MAX(CASE WHEN Field = 'baz' THEN Value ELSE NULL END) AS baz
FROM table
GROUP BY Object
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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