sql >> データベース >  >> RDS >> Sqlserver

親子階層テーブルからクエリを作成する方法

    レベルの数が固定または制限されている場合は、DYNAMICSQLは必要ない場合があります。 「解析」 パスは小さなXMLで実現できます。

    次のことを考慮してください:

    例:

    Declare @YourTable Table ([Parent] varchar(50),[Child] varchar(50))
    Insert Into @YourTable Values 
     (null ,'S-1')
    ,('S-1','S-11')
    ,('S-1','S-12')
    ,('S-1','S-13')
    ,('S-1','S-14')
    ,('S-1','S-15')
    ,('S-11','S-111')
    ,('S-11','S-112')
    
    ;with cteP as (
          Select Child
                ,Parent 
                ,PathID = cast(Child as varchar(500))
          From   @YourTable
          Where  Parent is Null
          Union  All
          Select Child  = r.Child
                ,Parent = r.Parent 
                ,PathID = cast(p.PathID+','+cast(r.Child as varchar(25)) as varchar(500))
          From   @YourTable r
          Join   cteP p on r.Parent  = p.Child)
    Select [Group] = Child
          ,B.*
     From  cteP A
     Cross Apply (
                    Select Level1 = xDim.value('/x[1]','varchar(max)')
                          ,Level2 = xDim.value('/x[2]','varchar(max)')
                          ,Level3 = xDim.value('/x[3]','varchar(max)')
                          ,Level4 = xDim.value('/x[4]','varchar(max)')
                          ,Level5 = xDim.value('/x[5]','varchar(max)')
                    From  (Select Cast('<x>' + replace(PathID,',','</x><x>')+'</x>' as xml) as xDim) as X 
                 ) B
      Order By PathID
    

    返品




    1. AVG+内部参加

    2. psql:サーバーに接続できませんでした:そのようなファイルまたはディレクトリはありません(Mac OS X)

    3. エラー1406:1406:データが列に対して長すぎますが、そうではありませんか?

    4. Brewを介してMySQLをインストールした後、エラーが発生します-サーバーはPIDファイルを更新せずに終了します