Сводная таблица MySQL установка логических значений таблицы - PullRequest
0 голосов
/ 03 августа 2020

Мне нужно выполнить то, что я считаю очень простым c MYSQL сводной таблицей, но я совершенно новичок в sql, поэтому я не уверен в синтаксисе. У меня есть следующая таблица

record_id tag_id
id_1      tag1
id_1      tag2
id_2      tag1
id_2      tag3

Я хотел бы получить сводную таблицу, строки которой являются уникальными идентификаторами записей, столбцы - уникальными идентификаторами тегов, а значения - логическими true / false, если этот идентификатор записи имеет это тег. В этом случае ожидаемый результат будет:

record_id tag1  tag2  tag3
id_1      true  true  false
id_2      true  false true

Как я могу этого добиться?

Дополнительный вопрос: что, если у меня есть другая таблица, которая связывает tag_names с tag_id, и я хотел бы столбцы моей сводной таблицы должны быть названы после tag_names? В этом примере, начиная с

tag_id tag_name
tag1   tag_name1
tag2   tag_name2
tag3   tag_name3

, я бы наконец получил

record_id tag_name1  tag_name2  tag_name3
id_1      true       true       false
id_2      true       false      true

Я благодарен за любую помощь.

1 Ответ

1 голос
/ 03 августа 2020
SELECT record_id,
       CASE WHEN SUM(tag_id = 'tag1') THEN 'true' ELSE 'false' END tag1,
       CASE WHEN SUM(tag_id = 'tag2') THEN 'true' ELSE 'false' END tag2,
       CASE WHEN SUM(tag_id = 'tag3') THEN 'true' ELSE 'false' END tag3
FROM source_table
GROUP BY record_id
ORDER BY record_id
...