Строки слияния на основе уникального идентификатора в виде набора JSON в SQL - PullRequest
1 голос
/ 11 апреля 2019

У меня есть таблица, и я хочу объединить строки на основе общего идентификатора

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 есть такой метод для динамического создания json, как этот SET @json, поскольку у меня большой файл.Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

Ваш желаемый результат недопустим в формате 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 голос
/ 11 апреля 2019

В дополнение к ответу выше, я пробовал в более старой версии, где 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...