5

SQL Server 2008 を使用していますが、これまで遭遇したことのない SQL の問題があります。階層カテゴリ リストを表す次の表を検討してください。

ID  Name            Description                     ParentID
--- --------------- ------------------------------- --------
1   Bicycle         Bicycles and Tricycles          {null}
2   Wheels          Wheels                          1
3   Spoked          Spoked Wheels                   2
4   Skate Boards    Skate Boards and accessories    {null}
5   Wheels          Skate Board Wheels              4
6   Polyurethane    Polyurethane Wheels             5

私が探している結果:

ID  Heirarchy                               Description
--- --------------------------------------- ------------------------------------
1   Bicycle                                 Bicycles and Tricycles
2   Bicycle, Wheels                         Wheels
3   Bicycle, Wheels, Spoked                 Spoked Wheels
4   Skate Boards                            Skate Boards and accessories
5   Skate Boards, Wheels                    Skate Board Wheels
6   Skate Boards, Wheels, Polyurethane      Polyurethane Wheels

このテーブルを照会し、各親の名前を子に連結して階層を表す各行の名前を返したいと思います。階層には事前に設定されたネストの深さがありません。これを単一のクエリで実行できるようにしたいと考えています。これはどのように達成できますか?

4

1 に答える 1

3
with tree as (
   select id, 
          cast(name as varchar(max)) as hierarchy,
          name, 
          description
   from the_table
   where parentID is null
   union all
   select c.id, 
          p.hierarchy + ', ' + c.name,
          c.name,
          c.description
    from the_table c
       join tree p on p.id = c.parentID
) 
select * 
from tree;
于 2012-11-29T23:11:28.467 に答える