代码之家  ›  专栏  ›  技术社区  ›  Hari_pb

基于SQL中JSON集合形式的唯一ID合并行

  •  0
  • Hari_pb  · 技术社区  · 5 年前

    我有一个表,我想根据公共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 动态地,因为我有一个大文件。 感谢您的帮助。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Martin Smith    5 年前

    您想要的结果不是有效的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}]  |
    +----+----------------------------------------------------------------+
    
        2
  •  1
  •   Hari_pb    5 年前

    除了上面的答案,我在不支持json的旧版本中尝试过,我们可以在MySQL中使用group_concat方法来处理这种情况:-

    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"