我有一张桌子,我想根据通用ID合并行
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
,因为我有大文件。
任何帮助表示赞赏。
答案 0 :(得分:2)
您想要的结果不是有效的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 :(得分:1)
除了以上答案外,我还在不支持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"