Hãy thử sử dụng khái niệm sau:
Chèn dữ liệu:
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');
Thực hiện truy vấn:
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
Kết quả:
Lưu ý rằng dấu phẩy ở cuối không được ảnh hưởng đến tính hợp lệ của dữ liệu. Kinh nghiệm của tôi với SQL Server còn hạn chế, nhưng điều này sẽ giúp bạn bắt đầu theo hướng có thể hoạt động.
Fiddle:
http://sqlfiddle.com/#!6/66b19/35