У меня есть одна таблица SQL, которая содержит отношения между родителями и детьми. Я хотел бы знать, как генерировать данные json в иерархическом формате ниже, используя запрос SQL (SQL Server 2016). Пожалуйста, проверьте мою структуру таблицы и необходимый формат вывода json.
Примечание: я уже сгенерировал данные ниже json, используя код "java script", но мне нужно сгенерировать эти данные json через SQL Запрос к серверу 2016.
SQL Таблица сервера с записью:
Id name url icon Parent
----------------------------------
3 LGD NULL fa fa-dashboard 0
4 GLD NULL fa fa-dashboard 0
5 FWD NULL fa fa-dashboard 0
9 Order Outstanding /ZohoDashboard/9 fa fa-dashboard 3
11 Current Order Status /ZohoDashboard/11 fa fa-dashboard 4
19 HR Overview /ZohoDashboard/19 fa fa-dashboard 3
20 HR Attrition /ZohoDashboard/20 fa fa-dashboard 3
21 Shipment Tracking /ZohoDashboard/21 fa fa-dashboard 3
23 D & D Overview /ZohoDashboard/23 fa fa-cogs 3
26 HO NULL fa fa-dashboard 0
27 Leather Stock Overview /ZohoDashboard/27 fa fa-cogs 4
28 Leather PO Pending Details /ZohoDashboard/28 fa fa-cogs 4
29 HR Overview /ZohoDashboard/29 fa fa-cogs 4
30 D & D Production details /ZohoDashboard/30 fa fa-cogs 4
31 Payment receivable details /ZohoDashboard/31 fa fa-cogs 26
42 HnS NULL fa fa-dashboard 0
43 H & S Sales Details /ZohoDashboard/43 fa fa-cogs 42
44 H & S Shoes Factory Order Details /ZohoDashboard/44 fa fa-cogs 42
45 KHRS NULL fa fa-dashboard 0
46 Greenfield Sales Details /ZohoDashboard/46 fa fa-cogs 45
47 Stock Overview /ZohoDashboard/47 fa fa-cogs 45
48 Stock Details /ZohoDashboard/48 fa fa-cogs 42
49 Break Even Overview /ZohoDashboard/49 fa fa-cogs 45
50 Camp Sales Details /ZohoDashboard/50 fa fa-cogs 45
51 Order Overview /ZohoDashboard/51 fa fa-cogs 42
52 Order Overview /ZohoDashboard/52 fa fa-cogs 5
53 Attendance Overview /ZohoDashboard/53 fa fa-cogs 4
54 HR Overview /ZohoDashboard/54 fa fa-cogs 5
55 Order In Value Overview /ZohoDashboard/55 fa fa-cogs 3
56 Leather Stock Details /ZohoDashboard/56 fa fa-cogs 5
57 tt /ZohoDashboard fa fa-cogs 0
58 HR Overview /ZohoDashboard/58 fa fa-cogs 57
15 User Management NULL fa fa-user 0
16 Menu Master /MenuList fa fa-user 15
17 User Access /UserList fa fa-user 15
18 Division Master NULL fa fa-user 15
25 User List NULL fa fa-cogs 15
Мне нужен Json формат вывода, подобный этому:
{
"items": [
{
"Id": 3,
"name": "LGD",
"url": null,
"icon": "fa fa-dashboard",
"Parent": 0,
"children": [
{
"Id": 9,
"name": "Order Outstanding",
"url": "/ZohoDashboard/9",
"icon": "fa fa-dashboard",
"Parent": 3
},
{
"Id": 19,
"name": "HR Overview",
"url": "/ZohoDashboard/19",
"icon": "fa fa-dashboard",
"Parent": 3
},
{
"Id": 20,
"name": "HR Attrition",
"url": "/ZohoDashboard/20",
"icon": "fa fa-dashboard",
"Parent": 3
},
{
"Id": 21,
"name": "Shipment Tracking",
"url": "/ZohoDashboard/21",
"icon": "fa fa-dashboard",
"Parent": 3
},
{
"Id": 23,
"name": "D & D Overview",
"url": "/ZohoDashboard/23",
"icon": "fa fa-cogs",
"Parent": 3
},
{
"Id": 55,
"name": "Order In Value Overview",
"url": "/ZohoDashboard/55",
"icon": "fa fa-cogs",
"Parent": 3
}
]
},
{
"Id": 4,
"name": "GLD",
"url": null,
"icon": "fa fa-dashboard",
"Parent": 0,
"children": [
{
"Id": 11,
"name": "Current Order Status",
"url": "/ZohoDashboard/11",
"icon": "fa fa-dashboard",
"Parent": 4
},
{
"Id": 27,
"name": "Leather Stock Overview",
"url": "/ZohoDashboard/27",
"icon": "fa fa-cogs",
"Parent": 4
},
{
"Id": 28,
"name": "Leather PO Pending Details",
"url": "/ZohoDashboard/28",
"icon": "fa fa-cogs",
"Parent": 4
},
{
"Id": 29,
"name": "HR Overview",
"url": "/ZohoDashboard/29",
"icon": "fa fa-cogs",
"Parent": 4
},
{
"Id": 30,
"name": "D & D Production details",
"url": "/ZohoDashboard/30",
"icon": "fa fa-cogs",
"Parent": 4
},
{
"Id": 53,
"name": "Attendance Overview",
"url": "/ZohoDashboard/53",
"icon": "fa fa-cogs",
"Parent": 4
}
]
},
{
"Id": 5,
"name": "FWD",
"url": null,
"icon": "fa fa-dashboard",
"Parent": 0,
"children": [
{
"Id": 52,
"name": "Order Overview",
"url": "/ZohoDashboard/52",
"icon": "fa fa-cogs",
"Parent": 5
},
{
"Id": 54,
"name": "HR Overview",
"url": "/ZohoDashboard/54",
"icon": "fa fa-cogs",
"Parent": 5
},
{
"Id": 56,
"name": "Leather Stock Details",
"url": "/ZohoDashboard/56",
"icon": "fa fa-cogs",
"Parent": 5
}
]
},
{
"Id": 26,
"name": "HO",
"url": null,
"icon": "fa fa-dashboard",
"Parent": 0,
"children": [
{
"Id": 31,
"name": "Payment receivable details",
"url": "/ZohoDashboard/31",
"icon": "fa fa-cogs",
"Parent": 26
}
]
},
{
"Id": 42,
"name": "HnS",
"url": null,
"icon": "fa fa-dashboard",
"Parent": 0,
"children": [
{
"Id": 43,
"name": "H & S Sales Details",
"url": "/ZohoDashboard/43",
"icon": "fa fa-cogs",
"Parent": 42
},
{
"Id": 44,
"name": "H & S Shoes Factory Order Details",
"url": "/ZohoDashboard/44",
"icon": "fa fa-cogs",
"Parent": 42
},
{
"Id": 48,
"name": "Stock Details",
"url": "/ZohoDashboard/48",
"icon": "fa fa-cogs",
"Parent": 42
},
{
"Id": 51,
"name": "Order Overview",
"url": "/ZohoDashboard/51",
"icon": "fa fa-cogs",
"Parent": 42
}
]
},
{
"Id": 45,
"name": "KHRS",
"url": null,
"icon": "fa fa-dashboard",
"Parent": 0,
"children": [
{
"Id": 46,
"name": "Greenfield Sales Details",
"url": "/ZohoDashboard/46",
"icon": "fa fa-cogs",
"Parent": 45
},
{
"Id": 47,
"name": "Stock Overview",
"url": "/ZohoDashboard/47",
"icon": "fa fa-cogs",
"Parent": 45
},
{
"Id": 49,
"name": "Break Even Overview",
"url": "/ZohoDashboard/49",
"icon": "fa fa-cogs",
"Parent": 45
},
{
"Id": 50,
"name": "Camp Sales Details",
"url": "/ZohoDashboard/50",
"icon": "fa fa-cogs",
"Parent": 45
}
]
},
{
"Id": 57,
"name": "tt",
"url": "/ZohoDashboard",
"icon": "fa fa-cogs",
"Parent": 0,
"children": [
{
"Id": 58,
"name": "HR Overview",
"url": "/ZohoDashboard/58",
"icon": "fa fa-cogs",
"Parent": 57
}
]
},
{
"Id": 15,
"name": "User Management",
"url": null,
"icon": "fa fa-user",
"Parent": 0,
"children": [
{
"Id": 16,
"name": "Menu Master",
"url": "/MenuList",
"icon": "fa fa-user",
"Parent": 15
},
{
"Id": 17,
"name": "User Access",
"url": "/UserList",
"icon": "fa fa-user",
"Parent": 15
},
{
"Id": 18,
"name": "Division Master",
"url": null,
"icon": "fa fa-user",
"Parent": 15
},
{
"Id": 25,
"name": "User List",
"url": null,
"icon": "fa fa-cogs",
"Parent": 15
}
]
}
]
}
Это мой SQL запрос:
select
PARENT.MenuId Id, PARENT.MenuName name, NULL url,
PARENT.IconCSS icon, PARENT.ParentId parent ,
(Select
MenuId Id, MenuName name,
Case
When MenuParam = 'Y' And ParentId <> 0
Then RTrim(Page) + '/' + RTrim(MenuId)
Else RTRIM(Page)
End url, iconcss icon, ParentId parent
from
MenuMaster AS Child
where
(CHILD.ParentId > 0) And CHILD.MenuId = PARENT.MenuId
FOR JSON AUTO) as Children
from
MenuMaster AS PARENT
FOR JSON PATH, ROOT ('items')
Текущий вывод json данных из этого запроса:
{"items":[{"Id":3,"name":"LGD","icon":"fa fa-dashboard","parent":0},{"Id":4,"name":"GLD","icon":"fa fa-dashboard","parent":0},{"Id":5,"name":"FWD","icon":"fa fa-dashboard","parent":0},{"Id":9,"name":"Order Outstanding","icon":"fa fa-dashboard","parent":3,"Children":[{"Id":9,"name":"Order Outstanding","url":"\/ZohoDashboard\/9","icon":"fa fa-dashboard","parent":3}]},{"Id":11,"name":"Current Order Status","icon":"fa fa-dashboard","parent":4,"Children":[{"Id":11,"name":"Current Order Status","url":"\/ZohoDashboard\/11","icon":"fa fa-dashboard","parent":4}]},{"Id":15,"name":"User Management","icon":"fa fa-user","parent":0},{"Id":16,"name":"Menu Master","icon":"fa fa-user","parent":15,"Children":[{"Id":16,"name":"Menu Master","url":"\/MenuList","icon":"fa fa-user","parent":15}]},{"Id":17,"name":"User Access","icon":"fa fa-user","parent":15,"Children":[{"Id":17,"name":"User Access","url":"\/UserList","icon":"fa fa-user","parent":15}]},{"Id":18,"name":"Division Master","icon":"fa fa-user","parent":15,"Children":[{"Id":18,"name":"Division Master","icon":"fa fa-user","parent":15}]},{"Id":19,"name":"HR Overview","icon":"fa fa-dashboard","parent":3,"Children":[{"Id":19,"name":"HR Overview","url":"\/ZohoDashboard\/19","icon":"fa fa-dashboard","parent":3}]},{"Id":20,"name":"HR Attrition","icon":"fa fa-dashboard","parent":3,"Children":[{"Id":20,"name":"HR Attrition","url":"\/ZohoDashboard\/20","icon":"fa fa-dashboard","parent":3}]},{"Id":21,"name":"Shipment Tracking","icon":"fa fa-dashboard","parent":3,"Children":[{"Id":21,"name":"Shipment Tracking","url":"\/ZohoDashboard\/21","icon":"fa fa-dashboard","parent":3}]},{"Id":23,"name":"D & D Overview","icon":"fa fa-cogs","parent":3,"Children":[{"Id":23,"name":"D & D Overview","url":"\/ZohoDashboard\/23","icon":"fa fa-cogs","parent":3}]},{"Id":25,"name":"User List","icon":"fa fa-cogs","parent":15,"Children":[{"Id":25,"name":"User List","icon":"fa fa-cogs","parent":15}]},{"Id":26,"name":"HO","icon":"fa fa-dashboard","parent":0},{"Id":27,"name":"Leather Stock Overview"