将具有 parent / child 层次结构的 table 转换为单独列中具有 parent 名称的 table?
Translate a table with parent / child hierarchy into a table with parent name in separate columns?
我有 table 的位置信息,其中包含“名称”、“代码”、“Parent”,“名称”字段在单个字段中包含所有国家、州、地区、Taluk 名称.
但我想以下面的格式查看。
我在这里发现了一些类似的问题陈述
但使用 XML 方法看起来并不复杂,它显示 Parent 和 Child 代码但不显示名称字段,根据线程中提到的评论,我们可以通过 JSON 获得结果方法。如果我使用 JSON 方法获得帮助,那就太好了。
您可以使用标准递归 CTE 来构建名称的层次结构和所需路径。然后用一点JSON.
解析||
分隔路径是一件小事
;with cteP as (
Select Name
,Code
,Parent
,PathID = string_escape(Name,'JSON')
From YourTable
Where Parent is Null
Union All
Select r.Name
,Child = r.Code
,Parent = r.Parent
,PathID = p.PathID+'||'+string_escape(r.Name,'JSON')
From YourTable r
Join cteP p on r.Parent = p.Code)
Select A.Name
,A.Code
,A.Parent
,Country = JSON_VALUE(S,'$[0]')
,State = JSON_VALUE(S,'$[1]')
,District = JSON_VALUE(S,'$[2]')
,Taluk = JSON_VALUE(S,'$[3]')
From cteP A
Cross Apply ( values ( '["'+replace(PathID,'||','","')+'"]' ) ) B(S)
结果
我有 table 的位置信息,其中包含“名称”、“代码”、“Parent”,“名称”字段在单个字段中包含所有国家、州、地区、Taluk 名称.
但我想以下面的格式查看。
我在这里发现了一些类似的问题陈述
您可以使用标准递归 CTE 来构建名称的层次结构和所需路径。然后用一点JSON.
解析||
分隔路径是一件小事
;with cteP as (
Select Name
,Code
,Parent
,PathID = string_escape(Name,'JSON')
From YourTable
Where Parent is Null
Union All
Select r.Name
,Child = r.Code
,Parent = r.Parent
,PathID = p.PathID+'||'+string_escape(r.Name,'JSON')
From YourTable r
Join cteP p on r.Parent = p.Code)
Select A.Name
,A.Code
,A.Parent
,Country = JSON_VALUE(S,'$[0]')
,State = JSON_VALUE(S,'$[1]')
,District = JSON_VALUE(S,'$[2]')
,Taluk = JSON_VALUE(S,'$[3]')
From cteP A
Cross Apply ( values ( '["'+replace(PathID,'||','","')+'"]' ) ) B(S)
结果