#sql #json #sql-server
#sql #json #sql-сервер
Вопрос:
У меня есть таблица, и я хочу объединить строки на основе общего идентификатора
ID file_id quantity
3 1122 25
3 1123 3
4 1126 7
4 1127 1
Я хочу получить
ID file_quantity_merged
3 {["file_id":1122, "quantity": 25],["file_id":1123, "quantity": 3]}
4 {["file_id":1126, "quantity": 7],["file_id":1127, "quantity": 1]}
Я не добавлял никаких попыток кода, поскольку я не уверен, есть ли у sql Server такой метод для динамического создания json, подобного этому SET @json
, поскольку у меня большой файл.
Любая помощь приветствуется.
Комментарии:
1. Так это SQL Server или MySQL??? «Я не добавил никаких попыток кода, поскольку я не уверен, есть ли у sql Server такой метод для создания json». Вы читали документацию???
Ответ №1:
Желаемый результат — недопустимый JSON.
Вам нужен массив объектов, а не список массивов, разделенных запятыми, в фигурных скобках.
Пока вы используете версию, поддерживающую FOR JSON AUTO
, вы можете использовать
SELECT ID,
( SELECT file_id, quantity
FROM YourTable T2
WHERE T2.ID = T1.ID FOR JSON AUTO ) AS file_quantity_merged
FROM YourTable T1
GROUP BY ID
Который возвращает
---- ----------------------------------------------------------------
| ID | file_quantity_merged |
---- ----------------------------------------------------------------
| 3 | [{"file_id":1122,"quantity":25},{"file_id":1123,"quantity":3}] |
| 4 | [{"file_id":1126,"quantity":7},{"file_id":1127,"quantity":1}] |
---- ----------------------------------------------------------------
Комментарии:
1. Версия: 5.7.17
2. Спасибо, работал для верхней версии sql Server, я работаю над очень старой версией, и это проблема, с которой я сталкиваюсь, когда
FOR JSON AUTO
она не поддерживается
Ответ №2:
В дополнение к приведенному выше ответу, я пробовал в более старой версии, где json не поддерживается, мы можем использовать метод group_concat для обработки таких ситуаций в MySQL:-
SELECT ID, GROUP_CONCAT(`file_id`, ':',
`quantity` SEPARATOR ', ') as file_quantity_merged
from TABLE_NAME GROUP BY id;
Output:-
ID file_quantity_merged
3 "1122:25, 1123:3"
4 "1126:7, 1127:1"
Комментарии:
1. разве group_concat не является функцией MySQL?