Группируйте и объединяйте строки Json с SQL

#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