Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

трябва да получите данни, групирани по groupid

Опитайте да използвате следната концепция:

Въведете данни:

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

Изпълнете заявката:

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

Резултати:

Имайте предвид, че запетаята в края не трябва да влияе на валидността на данните. Опитът ми с SQL Server е ограничен, но това трябва да ви помогне да започнете в посока, която може да работи.

Цигулка:

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. Как да намерите всички задачи на SQL Agent, които извикват дадена съхранена процедура

  2. T-SQL подзаявка Макс (дата) и присъединявания

  3. SQL Уникално ограничение за множество таблици

  4. Как да създам временна таблица от тип?

  5. Как да копирате запис в SQL таблица, но да замените уникалния идентификатор на новия ред?