【问题标题】:Translate a table with parent / child hierarchy into a table with parent name in separate columns?将具有父/子层次结构的表转换为在单独列中具有父名称的表?
【发布时间】:2021-10-22 05:25:24
【问题描述】:

我有一个位置信息表,其中包含“姓名”、“代码”、“父母”和“姓名”字段,其中包含单个字段中的所有国家、州、地区、塔鲁克名称。

但我想以以下格式查看。

我在这里找到了一些类似的问题陈述How to create query from parent child hierarchy table 但是使用 XML 方法看起来并不复杂,它显示父代码和子代码,但不显示名称字段,根据线程中提到的评论,我们可以通过 JSON 方法获得结果。如果我能获得使用 JSON 方法的帮助,那就太好了。

【问题讨论】:

    标签: sql sql-server parent-child


    【解决方案1】:

    您可以使用标准递归 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)
    

    结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多