@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')
  • Вопрос задан
  • 254 просмотра
Решения вопроса 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
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы