Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

besoin d'obtenir des données regroupées par groupid

Essayez d'utiliser le concept suivant :

Insérer des données :

CREATE TABLE some_table (some_data VARCHAR(20), some_other_data VARCHAR(20), groupId VARCHAR(20));
INSERT INTO some_table (some_data, some_other_data, groupId) values ('a', '1', 'id1');
INSERT INTO some_table (some_data, some_other_data, groupId) values ('b', '2', 'id1');
INSERT INTO some_table (some_data, some_other_data, groupId) values ('c', '3', 'id2');

Exécutez la requête :

SELECT '{"' + t.groupId + '": [{' + STUFF(
          (
            SELECT '{ "some_data":"' + td.some_data + '"', ', "some_other_data":' + td.some_other_data + '},'
            FROM some_table td
            WHERE t.groupId = td.groupId
            FOR XML PATH(''), TYPE
          ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') + ']}'
FROM some_table t
GROUP BY t.groupId

Résultats :

Notez que la virgule finale ne doit pas affecter la validité des données. Mon expérience avec SQL Server est limitée, mais cela devrait vous permettre de démarrer dans une direction qui peut fonctionner.

Violon :

http://sqlfiddle.com/#!6/66b19/35