Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

trzeba uzyskać dane pogrupowane według groupid

Spróbuj zastosować następującą koncepcję:

Wstaw dane:

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');

Wykonaj zapytanie:

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

Wyniki:

Zauważ, że końcowy przecinek nie powinien wpływać na poprawność danych. Moje doświadczenie z SQL Serverem jest ograniczone, ale to powinno pomóc Ci rozpocząć pracę w odpowiednim kierunku.

Skrzypce:

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przywrócić kopię zapasową SQL Server 2014 w SQL Server 2008

  2. Łączenie ciągów t-sql

  3. Wybór pierwszego rzędu na grupę

  4. Left join z najbliższą wartością bez duplikatów

  5. Czy NOLOCK jest wartością domyślną dla instrukcji SELECT w SQL Server 2005?