将具有 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)

结果