I have a sample data table in SQL below
Sales_Order | PO_number | Booking_number | Container_number | Seal_number | ETD1 | ETA1 | Country |
---|---|---|---|---|---|---|---|
17493993 | 4338_A | MXO0583354 | CAIU9661214 | H4131037 | 30/06/2022 | 04/08/2022 | Jordan |
17493996 | 4338_A | MXO0583354 | CMAU4496275 | H4131039 | 30/06/2022 | 04/08/2022 | Jordan |
17699594 | 4355 | 190VC0059204 | MSMU8090753 | FJ14673712 | 02/07/2022 | 11/08/2022 | Jordan |
17699593 | 4355 | 190VC0059204 | MSDU7050180 | FJ14673630 | 02/07/2022 | 11/08/2022 | Jordan |
17699591 | 4355 | 190VC0059204 | CAIU7594190 | FJ14673612 | 02/07/2022 | 11/08/2022 | Jordan |
18193374 | Order_for_September_2 | 190VC0059041 | MSMU8133238 | FJ14673638 | 06/07/2022 | 19/08/2022 | Latvia |
I want to get the output in the required nested Json format as below
[{
"Sales_Order": 17493993,
"PO_number": "4338_A",
"Booking_number": "MXO0583354",
"Container_number": "CAIU9661214",
"Seal_number": "H4131037",
"ETD1": "30/06/2022",
"ETA1": "04/08/2022",
"Country": "Jordan",
"Sub_Rows": [{
"Sales_Order": 17493996,
"PO_number": "4338_A",
"Booking_number": "MXO0583354",
"Container_number": "CMAU4496275",
"Seal_number": "H4131039",
"ETD1": "30/06/2022",
"ETA1": "04/08/2022",
"Country": "Jordan",
}]
},{
"Sales_Order": 17699594,
"PO_number": "4335",
"Booking_number": "190VC0059204",
"Container_number": "MSMU8090753",
"Seal_number": "FJ14673712",
"ETD1": "02/07/2022",
"ETA1": "11/08/2022",
"Country": "Jordan",
"Sub_Rows": [{
"Sales_Order": 17699593,
"PO_number": "4335",
"Booking_number": "190VC0059204",
"Container_number": "MSDU7050180",
"Seal_number": "FJ14673630",
"ETD1": "02/07/2022",
"ETA1": "11/08/2022",
"Country": "Jordan",
}],
"Sub_Rows": [{
"Sales_Order": 17699591,
"PO_number": "4335",
"Booking_number": "190VC0059204",
"Container_number": "CAIU7594190",
"Seal_number": "FJ14673612",
"ETD1": "02/07/2022",
"ETA1": "11/08/2022",
"Country": "Jordan",
}],
},{
"Sales_Order": 18193374,
"PO_number": "Order_for_September_2",
"Booking_number": "190VC0059041",
"Container_number": "MSMU8133238",
"Seal_number": "FJ14673638",
"ETD1": "06/07/2022",
"ETA1": "19/08/2022",
"Country": "Latvia",
}
]
Here, I need to apply a condition : if the booking number has more than 1 container number, 1st booking number will be on the root and the following booking numbers will be on the sub_rows of the root.
I am trying to groupby in SQL however not successful to achieve the required output? Any help will be appreciated?
My queryso far
SELECT
*,
Sub_Rows = ( Select * FROM [DMS_Backend].[dbo].[DMS_DEV] as V where V.Booking_number = H.Booking_number for JSON Path )
FROM [DMS_Backend].[dbo].[DMS_DEV] as H
group By H.Sales_Order, H.PO_number, H.Booking_number, H.Container_number, H.Seal_number, H.ETA1, H.ETD1, H.Country for JSON Path
Consider using a ROW_NUMBER()
for running counts of booking number. Then, including in outer query values equal to 1 and subquery values after 1:
WITH H AS (
SELECT *,
ROW_NUMBER() OVER(
PARTITION BY Booking_number
ORDER BY Container_number
) AS rn
FROM [DMS_Backend].[dbo].[DMS_DEV]
)
SELECT
Sales_Order, PO_number, Booking_number, Container_number,
Seal_number, ETD1, ETA1, Country,
Sub_Rows = (
SELECT Sales_Order, PO_number, Booking_number, Container_number,
Seal_number, ETD1, ETA1, Country
FROM H AS V
WHERE V.Booking_number = H_PLUS.Booking_number
AND V.rn > 1
FOR JSON PATH
)
FROM H
WHERE rn = 1
GROUP BY Sales_Order, PO_number, Booking_number, Container_number,
Seal_number, ETD1, ETA1, Country
ORDER BY Sales_Order, PO_number, Booking_number, Container_number,
Seal_number, ETD1, ETA1, Country
FOR JSON PATH
Output
[
{
"Sales_Order": 17493993,
"PO_number": "4338_A",
"Booking_number": "MXO0583354",
"Container_number": "CAIU9661214",
"Seal_number": "H4131037",
"ETD1": "30/06/2022",
"ETA1": "04/08/2022",
"Country": "Jordan",
"Sub_Rows": [
{
"Sales_Order": 17493996,
"PO_number": "4338_A",
"Booking_number": "MXO0583354",
"Container_number": "CMAU4496275",
"Seal_number": "H4131039",
"ETD1": "30/06/2022",
"ETA1": "04/08/2022",
"Country": "Jordan"
}
]
},
{
"Sales_Order": 17699591,
"PO_number": "4355",
"Booking_number": "190VC0059204",
"Container_number": "CAIU7594190",
"Seal_number": "FJ14673612",
"ETD1": "02/07/2022",
"ETA1": "11/08/2022",
"Country": "Jordan",
"Sub_Rows": [
{
"Sales_Order": 17699593,
"PO_number": "4355",
"Booking_number": "190VC0059204",
"Container_number": "MSDU7050180",
"Seal_number": "FJ14673630",
"ETD1": "02/07/2022",
"ETA1": "11/08/2022",
"Country": "Jordan"
},
{
"Sales_Order": 17699594,
"PO_number": "4355",
"Booking_number": "190VC0059204",
"Container_number": "MSMU8090753",
"Seal_number": "FJ14673712",
"ETD1": "02/07/2022",
"ETA1": "11/08/2022",
"Country": "Jordan"
}
]
},
{
"Sales_Order": 18193374,
"PO_number": "Order_for_September_2",
"Booking_number": "190VC0059041",
"Container_number": "MSMU8133238",
"Seal_number": "FJ14673638",
"ETD1": "06/07/2022",
"ETA1": "19/08/2022",
"Country": "Latvia"
}
]
Online Demo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With