Превращение строк в несколько элементов в JSON

#json #ssms #for-json

#json #ssms #для-json

Вопрос:

У меня есть 1 номер заказа, который содержит 4 артикула, каждый артикул связан с 3 категориями:

введите описание изображения здесь

Мне нужно написать инструкцию SQL, чтобы преобразовать ее в формат JSON, который включает подзапрос и несколько элементов в массиве. В принципе, мне нужно, чтобы это выглядело так:

 {  "order_number": "WEB000000000",  "order_items": [  {  "sku": 111111111,  "categories": ["Checked Shirts", "Mens", "Shirts"]  },  {  "sku": 333333333,  "categories": ["Accessories amp; Shoes", "Mens Accessories", "Socks"]  },  {  "sku": 666666666,  "categories": ["Checked Shirts", "Mens", "Shirts"]  },  {  "sku": 999999999,  "categories": ["Nightwear", "Slippers", "Womens"]  }  ] }  

Вот что у меня есть до сих пор, но я просто не могу понять это правильно:

 DROP TABLE IF EXISTS ##Data; CREATE TABLE ##Data (  order_number varchar(100),  sku bigint,  categories varchar(100) ); INSERT INTO ##Data  select 'WEB000000000', 111111111, 'Mens'  union all select 'WEB000000000', 111111111, 'Shirts'  union all select 'WEB000000000', 111111111, 'Checked Shirts'  union all select 'WEB000000000', 333333333, 'Accessories amp; Shoes'  union all select 'WEB000000000', 333333333, 'Mens Accessories'  union all select 'WEB000000000', 333333333, 'Socks'  union all select 'WEB000000000', 666666666, 'Mens'  union all select 'WEB000000000', 666666666, 'Shirts'  union all select 'WEB000000000', 666666666, 'Checked Shirts'  union all select 'WEB000000000', 999999999, 'Womens'  union all select 'WEB000000000', 999999999, 'Nightwear'  union all select 'WEB000000000', 999999999, 'Slippers'    SELECT * FROM ##Data;    select OUTER1.[order_number] as [order_number],  (select OSL.[order_number],   (select [sku],   (select [categories]  from ##Data skus  where order_item.[order_number] = skus.[order_number]  and order_item.[sku] = skus.[sku]  GROUP BY [categories]  FOR JSON PATH) as categories  from ##Data order_item  where order_item.[order_number] = OSL.[order_number]  GROUP BY [order_number], [sku]  FOR JSON PATH) as order_items   from ##Data OSL   where OSL.[order_number]=OUTER1.[order_number]  group by OSL.[order_number]  FOR JSON PATH, WITHOUT_ARRAY_WRAPPER) AS JSON from ##Data OUTER1  group by OUTER1.[order_number]   drop table ##Data