select id, group_concat(`Name` separator ',') as `ColumnName`
from
(
select
id,
concat(`Name`, ':', group_concat(`Value` separator ',')) as `Name`
from mytbl
group by
id,
`Name`
) tbl
group by id;
Вы можете увидеть это здесь: Sql Fiddle Demo . Именно то, что вам нужно.
Обновление
разбиения в два этапа. Сначала мы получаем таблицу, в которой все значения (разделенные запятыми) соответствуют уникальному [Имя, идентификатор]. Затем из полученной таблицы мы получаем все имена и значения как одно значение для каждого уникального идентификатора. См. Это объяснено здесь. SQL Fiddle Demo (прокрутите вниз, так как он имеет два набора результатов)
Изменить Произошла ошибка при чтении вопроса, я сгруппировал его только по идентификатору. Но два group_contacts необходимы, если (значения должны быть объединены, сгруппированы по имени и идентификатору, а затем по всем идентификаторам). Предыдущий ответ был
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Вы можете увидеть, как это реализовано здесь: SQL Fiddle Demo
GROUP_CONCAT
может без уведомления усечь его вывод доgroup_concat_max_len
.SET group_concat_max_len=...
поможет, но в любом случае рекомендуется проверить, что возвращаемая длина (в байтах?) меньше, чемgroup_concat_max_len
.Пытаться:
SQL Fiddle: http://sqlfiddle.com/#!2/b5abe/9/0
источник
источник
Во-первых, я не вижу причин, по которым идентификатор не является уникальным, но я предполагаю, что это идентификатор, который подключается к другой таблице. Во-вторых, нет необходимости в подзапросах, которые перегружают сервер. Вы делаете это одним запросом, вот так
Вы получаете быстрые и правильные результаты, и вы можете разделить результат на СЕПАРАТОР "|". Я всегда использую этот разделитель, потому что его невозможно найти внутри строки, поэтому он уникален. Нет проблем с двумя буквами «А», вы определяете только значение. Или вы можете сделать еще один столбец с буквой, что еще лучше. Как это :
источник
вы должны использовать приведение или преобразование, иначе будет возвращен BLOB
результат
вам нужно снова обработать результат с помощью такой программы, как python или java
источник
IF OBJECT_ID('master..test') is not null Drop table test
Имя моей таблицы - test, а для объединения я использую синтаксис For XML Path (''). Функция stuff вставляет строку в другую строку. Он удаляет указанную длину символов в первой строке в начальной позиции, а затем вставляет вторую строку в первую строку в начальной позиции.
Функции STUFF выглядят так: STUFF (символьное_выражение, начало, длина, символьное_выражение)
character_expression - это выражение символьных данных. character_expression может быть константой, переменной или столбцом символьных или двоичных данных.
start Целочисленное значение, указывающее местоположение для начала удаления и вставки. Если начало или длина отрицательны, возвращается пустая строка. Если start длиннее первого character_expression, возвращается пустая строка. start может иметь тип bigint.
длина Целое число, указывающее количество удаляемых символов. Если длина больше, чем первое character_expression, удаление происходит до последнего символа в последнем character_expression. длина может иметь тип bigint.
источник
ВЫБРАТЬ id, Group_concat (
column
) FROM (SELECT id, Concat (name
, ':', Group_concat (value
)) AScolumn
FROM mytbl GROUP BY id, name) tbl GROUP BY id;источник