I am trying to get a JSON expression that contains a nested title (cars.) based on another column (ID).
Original table:

The basic item has the following structure:
"FirstName":"Eli",
"ID":123,
"cars":[
{
"CarLicense":222,
"CarType":"AC",
"SourceSystem":"CompanyCars"
}
Each ID should have a single object.
If ID appears twice, then the item title "cars" should be an array:
{
"FirstName":"Eli",
"ID":123,
"cars":[
{
"CarLicense":222,
"CarType":"AC",
"SourceSystem":"CompanyCars"
},
{
"CarLicense":111,
"CarType":"ACAA",
"SourceSystem":"GuestCars"
}
]
}
This is the SQL code I tried:
SELECT
FirstName,
ID,
CarLicense AS 'cars.CarLicense',
CarType AS 'cars.CarType',
CarSystem AS 'cars.SourceSystem'
FROM
[Tamir].[dbo].[cars]
FOR JSON PATH;
And this is the result I got:
[
{
"FirstName":"Eli",
"ID":123,
"cars":{
"CarLicense":222,
"CarType":"AC",
"SourceSystem":"CompanyCars"
}
},
{
"FirstName":"Eli",
"ID":123,
"cars":{
"CarLicense":111,
"CarType":"ACAA",
"SourceSystem":"GuestCars"
}
},
{
"FirstName":"Gal",
"ID":789,
"cars":{
"CarLicense":444,
"CarType":"AB",
"SourceSystem":"PrivateCars"
}
},
{
"FirstName":"Tamir",
"ID":456,
"cars":{
"CarLicense":333,
"CarType":"AX",
"SourceSystem":"PrivateCars"
}
},
{
"FirstName":"Tamir",
"ID":4561,
"cars":{
"CarLicense":555,
"CarType":"B",
"SourceSystem":"GuestCars"
}
}
]
The result I would like to end up with:
[
{
"FirstName":"Eli",
"ID":123,
"cars":[
{
"CarLicense":222,
"CarType":"AC",
"SourceSystem":"CompanyCars"
},
{
"CarLicense":111,
"CarType":"ACAA",
"SourceSystem":"GuestCars"
}
]
},
{
"FirstName":"Gal",
"ID":789,
"cars":{
"CarLicense":444,
"CarType":"AB",
"SourceSystem":"PrivateCars"
}
},
{
"FirstName":"Tamir",
"ID":456,
"cars":{
"CarLicense":333,
"CarType":"AX",
"SourceSystem":"PrivateCars"
}
},
{
"FirstName":"Tamir",
"ID":4561,
"cars":{
"CarLicense":555,
"CarType":"B",
"SourceSystem":"GuestCars"
}
}
]
Code to generate the sample table:
DROP TABLE IF EXISTS cars;
CREATE TABLE cars
(
FirstName VARCHAR(5),
ID INTEGER,
CarLicense INTEGER,
CarType VARCHAR(4),
CarSystem VARCHAR(11)
);
INSERT INTO cars (FirstName, ID, CarLicense, CarType, CarSystem)
VALUES ('Eli', 123, 222, 'AC', 'CompanyCars');
INSERT INTO cars (FirstName, ID, CarLicense, CarType, CarSystem)
VALUES ('Eli', 123, 111, 'ACAA', 'GuestCars');
INSERT INTO cars (FirstName, ID, CarLicense, CarType, CarSystem)
VALUES ('Gal', 789, 444, 'AB', 'PrivateCars');
INSERT INTO cars (FirstName, ID, CarLicense, CarType, CarSystem)
VALUES ('Tamir', 456, 333, 'AX', 'PrivateCars');
INSERT INTO cars (FirstName, ID, CarLicense, CarType, CarSystem)
VALUES ('Tamir', 4561, 555, 'B', 'GuestCars');
Appreciate any help, Tamir