2

Given the sample json data below, how can I write a query to pull the array data all in one step to individual column?

DECLARE @json NVARCHAR(MAX);
SET @json = N'{
  "Title":"ReportExport",
  "Attachment":"",
  "Name":"Dhoni",
  "FirstTextArea":"Dhoni",
  "Radio":"First",
  "CheckBox":"{C++~.Net}",
  "FileUpload":"",
  "FirstGroupitem":[
    {
      "Address":"QTUvNU55THBxT2hmVXFkWGpia2NJQT09",
      "Age":"30",
      "TestField":"",
      "Country":"ind",
      "SecondTextArea":"11"
    },
    {
      "Address":"OVpuaXpxNTlrZWg4dGI4VXRYMUg0Zz09",
      "Age":"30",
      "TestField":"",
      "Country":"us",
      "SecondTextArea":"22"
    },
    {
      "Address":"WGErNFU2S0tYekdsRWZTT2NxSzZLQT09",
      "Age":"30",
      "TestField":"",
      "Country":"us",
      "SecondTextArea":"33"
    }
  ],
  "SecondGroupitem":[
    {
      "Address1":"QTUvNU55THBxT2hmVXFkWGpia2NJQT09",
      "Age1":"30"
    },
    {
      "Address1":"OVpuaXpxNTlrZWg4dGI4VXRYMUg0Zz09",
      "Age1":"30"
    }
  ]
}';

Statement:

SELECT i.Title,i.Attachment,i.Name,i.FirstTextArea,i.Radio,i.CheckBox,i.FileUpload,'FirstGroupitem' as FirstGroupitem,
 a.Address, a.Age,a.TestField,a.Country,a.SecondTextArea 
FROM OPENJSON(@json) 
WITH (
    Title  VARCHAR(max) N'$.Title',
    Attachment  VARCHAR(max) N'$.Attachment',
    Name  VARCHAR(max) N'$.Name',
    FirstTextArea  VARCHAR(max) N'$.FirstTextArea',
    Radio  VARCHAR(max) N'$.Radio',
    CheckBox  VARCHAR(max) N'$.CheckBox',
    FileUpload  VARCHAR(max) N'$.FileUpload',
    FirstGroupitem nvarchar(max) '$.FirstGroupitem' AS JSON
) AS i
CROSS APPLY (
   SELECT *
   FROM OPENJSON(i.FirstGroupitem)
   WITH (
     Address  VARCHAR(max) N'$.Address',
     Age  VARCHAR(max) N'$.Age',
     TestField  VARCHAR(max) N'$.TestField',
     Country  VARCHAR(max) N'$.Country',
     SecondTextArea  VARCHAR(max) N'$.SecondTextArea'
   )
) a

I want output like this:

enter image description here

1 Answer 1

2

You need to join the items from the $.FirstGroupitem" and $."SecondGroupitem JSON arrays by index:

Statement:

SELECT 
   i.Title, i.Attachment, i.Name, i.FirstTextArea, i.Radio, i.CheckBox,
   j.FirstGroupAddress, j.SecondGroupAddress
FROM OPENJSON(@json) 
WITH (
    Title  VARCHAR(max) N'$.Title',
    Attachment  VARCHAR(max) N'$.Attachment',
    Name  VARCHAR(max) N'$.Name',
    FirstTextArea  VARCHAR(max) N'$.FirstTextArea',
    Radio  VARCHAR(max) N'$.Radio',
    CheckBox  VARCHAR(max) N'$.CheckBox',
    FileUpload  VARCHAR(max) N'$.FileUpload',
    FirstGroupitem nvarchar(max) '$.FirstGroupitem' AS JSON,
    SecondGroupitem nvarchar(max) '$.SecondGroupitem' AS JSON
) AS i
OUTER APPLY (
   SELECT f2.Address AS FirstGroupAddress, s2.Address AS SecondGroupAddress
   FROM OPENJSON (i.FirstGroupitem) f1
   FULL JOIN OPENJSON (i.SecondGroupitem) s1 ON f1.[key] = s1.[key]
   OUTER APPLY OPENJSON(f1.[value]) WITH (
       Address varchar(100) '$.Address'
       -- Additional columns here
   ) f2
   OUTER APPLY OPENJSON(s1.[value]) WITH (
      Address varchar(100) '$.Address1'
      -- Additional columns here
   ) s2
) j

Result:

Title        Attachment Name    FirstTextArea Radio CheckBox    FirstGroupAddress                SecondGroupAddress
---------------------------------------------------------------------------------------------------------------------------------
ReportExport            Dhoni   Dhoni         First {C++~.Net}  QTUvNU55THBxT2hmVXFkWGpia2NJQT09 QTUvNU55THBxT2hmVXFkWGpia2NJQT09
ReportExport            Dhoni   Dhoni         First {C++~.Net}  OVpuaXpxNTlrZWg4dGI4VXRYMUg0Zz09 OVpuaXpxNTlrZWg4dGI4VXRYMUg0Zz09
ReportExport            Dhoni   Dhoni         First {C++~.Net}  WGErNFU2S0tYekdsRWZTT2NxSzZLQT09    
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.