#sql #postgresql
Вопрос:
У меня есть таблица с несколькими строками/записями с другим значением json. Я хотел бы сгруппировать их и объединить в последнюю единственную строку в рамках запроса select
Id Col
1 {'a': 1}
1 {'b': 2}
2 {'c': 3}
2 {'d': 4}
2 {'e': 5}
Желаемый Результат
Id Col
1 {'a': 1, 'b': 2}
2 {'c': 3, 'd': 4, 'e': 5}
Комментарии:
1. укажите, где размещена таблица
2. отметьте базу данных, которую вы используете
Ответ №1:
если вы используете sql-server
,попробуйте следующее:
CREATE table #temp( Id int, Col varchar(100))
Insert into #temp values
(1,'{''a'': 1}')
,(1,'{''b'': 2}')
,(2,'{''c'': 3}')
,(2,'{''d'': 4}')
,(2,'{''e'': 5}')
SELECT DISTINCT id,
'{'
STUFF((
SELECT ',' Replace(Replace(col,'{',''),'}','')
FROM #temp as t1
WHERE t1.id = t2.id
FOR XML PATH('')
), 1, 1, '')
'}' AS col
FROM #temp as t2
drop table #temp
Ответ №2:
SELECT id, CONCAT('{',STRING_AGG(REPLACE(REPLACE(Col,'{',''),'}',''),','),'}') AS COL
FROM table
GROUP BY id
демонстрация в бд<>скрипка<>
Комментарии:
1. Тогда Col будет текстовым столбцом, можно ли восстановить объединенный тип обратно в json?
2. Информация в таблице не меняется, она отображается только в этом формате. используйте «выбрать * из таблицы». данные таблицы не меняются
3. Похоже, я не могу получить доступ к ключам и значениям в моем запросе к приведенному выше объединенному выходу, похоже, это не json
4. Я отобразил его в нужном вам формате, и в этом случае ваши данные не являются Json