SQL Запрос на получение значений массива json через запятую - PullRequest
0 голосов
/ 03 мая 2020

У меня есть объект ниже Json. Мне нужно получить имена задач через запятую (,).

{
  "Model": [
    {
      "ModelName": "Test Model",    
      "Object": [
         {
           "ID": 1,
           "Name": "ABC",
           "Task" : [
             {
                TaskID : 1222,
                Name: "TaskA"
             },
             {
                TaskID : 154,
                Name: "TaskB"
             }
           ]
         },
         {
           "ID": 11,
           "Name": "ABCD",
           "Task" : [
             {
                TaskID : 222,
                Name: "TaskX"
             },
             {
               TaskID : 234,
               Name: "TaskY"
             }
           ]
        },         
     ]  
 }]}

Ожидаемый результат должен быть в таблице ниже. Мне нужно, чтобы имена задач были разделены запятыми.

ModelName   ObjectID   ObjectName  TaskName
Test Model     1          ABC      TaskA, TaskB
Test Model     11         ABCD     TaskX, TaskY

Я пробовал следующий запрос. Но я не знаю, как сгруппировать имена задач.

                  SELECT   S1.ModelName,
                           S2.ID  AS ObjectID, 
                           S2.Name AS ObjectName, 
                           S3.TaskName
                     FROM TableA 
                       CROSS APPLY OPENJSON(JsonData)
                         WITH (Model NVARCHAR(MAX) '$.Model[0]' AS JSON) S1
                       CROSS APPLY OPENJSON (S1.Model) 
                         WITH (Object NVARCHAR(MAX) '$.Object' AS JSON,
                               ID  INT '$.ID',
                               Name NVARCHAR(250) '$.Name') S2
                       CROSS APPLY OPENJSON (S2.Object) 
                         WITH (Task NVARCHAR(MAX) '$.Task' AS JSON ,
                               TaskName NVARCHAR(MAX) '$.TaskName') S3  

1 Ответ

0 голосов
/ 03 мая 2020

Исправлено json в допустимом формате, и вот запрос SQL для желаемого результата. Приведенный ниже запрос компилируется и хорошо работает в Oracle Компилятор

SELECT * FROM JSON_TABLE(
    '{"Model":[{"ModelName":"Test Model","Object":[{"ID":1,"Name":"ABC","Task":[{"TaskID":1222,"Name":"TaskA"},{"TaskID":154,"Name":"TaskB"}]},{"ID":11,"Name":"ABCD","Task":[{"TaskID":222,"Name":"TaskX"},{"TaskID":234,"Name":"TaskY"}]}]}]}',
    '$.Model[*]'
    COLUMNS (
       -- L_MODEL_ROWNUM FOR ORDINALITY,
        L_MODEL_NAME VARCHAR2(10) PATH '$.ModelName',
        NESTED PATH '$.Object[*]' COLUMNS (
            --L_OBJECT_ROWNUM FOR ORDINALITY,
            L_OBJECT_ID NUMBER PATH '$.ID',
            L_OBJECT_NAME VARCHAR2(10) PATH '$.Name',
            L_TASK_NAME VARCHAR2(100) FORMAT JSON WITH WRAPPER PATH '$.Task[*].Name'
            )
        )
    )
...