2017-11-08 16 views
1

はクエリです:マスター/詳細テーブルに対してSQLからJSONを生成することができません

SELECT [C].[Id], 
     [C].[Name],   
     [Module].[Id], 
     [Module].[Name]  
FROM [dbo].[Category] [C]  
INNER JOIN [CategoryModule] [CM] 
ON [C].[Id] = [CM].[CategoryId] 
CROSS APPLY (SELECT [M].[Id], [M].[Name] FROM [Module] [M] 
WHERE [M].[Id] = [CM].[ModuleId]) [Module] 
WHERE [C].[Id]IN (1,2) 
FOR JSON AUTO 

は出力:

[ 
    {"Id":1,"Name":"Book","Module":[{"Id":1,"Name":"Unit"}]}, 
    {"Id":2,"Name":"Business","Module":[{"Id":1,"Name":"Unit"}]}, 
    {"Id":1,"Name":"Book","Module":[{"Id":2,"Name":"App"}]} 
] 

必要があります。

[ 
    {"Id":1,"Name":"Book","Module":[{"Id":1,"Name":"Unit"},{"Id":2,"Name":"App"}]}, 
    {"Id":2,"Name":"Business","Module":[{"Id":1,"Name":"Unit"}]} 
] 

それ同じマスターに別のオブジェクトを生成するテーブルエントリ。

答えて

0

こんにちは、私はそれが可能使用FOR JSON AUTOOPENJSONだと思うとJSON_MODIFY

私は同じ問題を抱えていたが、私は最終的にあなたのケースでは、溶液

を見つけるこの

を試してみてください
SELECT 
JSON_MODIFY (
    (SELECT value FROM OPENJSON((SELECT * FROM Category WHERE Id = C.Id FOR JSON AUTO),'$')), 
    '$.Module', 
    (SELECT M.Id, M.Name FROM CategoryModule CM INNER JOIN Module M ON CM.ModuleId= M.Id WHERE CM.CategoryId= C.Id FOR JSON AUTO) 
) AS Category 
FROM Category C 
FOR JSON AUTO 

出力リレーは

です
[{ 
    "Category": { 
     "Id": 1, 
     "Name": "Book", 
     "Module": [{ 
      "Id": 1, 
      "Name": "Unit" 
     }, { 
      "Id": 2, 
      "Name": "App" 
     }] 
    } 
}, { 
    "Category": { 
     "Id": 2, 
     "Name": "Business", 
     "Module": [{ 
      "Id": 1, 
      "Name": "Unit" 
     }] 
    } 
}] 
関連する問題