Я ищу для поворота одного столбца данных в несколько строк на основе идентификатора пользователя в MySQL - я бы предпочел сделать это с помощью SQL-запроса, а не внешнего инструмента.MySQL pivot column
Моя конкретная ситуация кажется довольно простой, но я не могу понять ее на основе различных аргументов/ответов/примеров, которые я нашел.
Вот таблица у меня есть на данный момент:
╔════════╦═════════╦═════════╗
║ userID ║ object ║ index ║
╠════════╬═════════╣═════════╣
║ user1 ║ Apple ║ 1 ║
║ user1 ║ Orange ║ 2 ║
║ user1 ║ Pear ║ 3 ║
║ user2 ║ Kiwi ║ 1 ║
║ user2 ║ Melon ║ 2 ║
║ user2 ║ Mango ║ 3 ║
║ user3 ║ Apple ║ 1 ║
║ user3 ║ Melon ║ 2 ║
║ user3 ║ Pear ║ 3 ║
║ user3 ║ Mango ║ 4 ║
╚════════╩═════════╩═════════╝
И это желаемый результат:
╔════════╦═════════╦═════════╦═════════╦═════════╗
║ userID ║ 1 ║ 2 ║ 3 ║ 4 ║
╠════════╬═════════╬═════════╬═════════╬═════════╣
║ user1 ║ Apple ║ Orange ║ Pear ║ empty ║
║ user2 ║ Kiwi ║ Melon ║ Mango ║ empty ║
║ user3 ║ Apple ║ Melon ║ Pear ║ Mango ║
╚════════╩═════════╩═════════╩═════════╩═════════╝
Несколько вещей, чтобы отметить:
- Колонны, после того, как userID, должен быть индексом объектов для данного пользователя
- Объекты будут отображаться в том же порядке (я думаю, это то, что один столбец столбца/строки все равно)
- Число объектов на идентификатор пользователя равно переменной - количество столбцов должно соответствовать максимальному количеству объектов одного пользователя. В приведенном выше примере пользователь3 имеет 4 объекта, поэтому у нас есть 4 столбца после столбца userID, хотя у других пользователей меньше объектов. Я рад оставить пустые записи, когда у пользователя нет данных для этого столбца.
Я уверен, что это на самом деле довольно просто, и я уже думал об этом.
Редактировать: Я немного изменил таблицы, основанные на комментарии Гордона Линоффа, чтобы включить индекс упорядочения, который у меня есть как часть исходной таблицы.
Кроме того, альтернативный вариант того же вопроса, основанный на ответе Гордона.
Если я знаю переднее максимальное количество столбцов, которые должны иметь (в этом примере 4 для объектов), это упрощает? например Я могу создать таблицу с 5 столбцами, прежде чем запускать свой запрос.
Таблицы SQL представляют собой * неупорядоченные * наборы. В таблице нет упорядочения строк, если только столбец не указывает порядок. У вас есть такая колонна? –
Это очень хороший момент.У меня действительно есть столбец, который я мог бы использовать для указания oder (и, возможно, заголовков столбцов). Но на неупорядоченных множествах - всякий раз, когда я использовал select, он всегда давал мне столбцы в том же порядке, что и таблица, в которой он хранился? (мои таблицы автоматически увеличиваются с столбцом идентификатора по умолчанию, который он дает мне в innoDB). – Hobsie