0
CatID  parID  catName
1      -1        A
2       1        B  
3       2        C
4       3        D

親子関係を文字列形式で返すクエリを書きたいです。

上記の表では、catName の parentId -1 は親を持たないことを意味します。B の parentID は 1 です。これは、A がその親であることを意味します。

最後に、文字列は次のようになります

A=>B=>c=>D

これは、クエリを生成したい方法です。

CatID を渡すと、-1 になるまでトラバースします。

4

3 に答える 3

3
declare @CatID int;
set @CatID = 4;

with C as
(
  select parID,
         cast(catName as varchar(max)) as catName
  from YourTable
  where CatID = @CatID
  union all
  select T.parID,
         T.catName + '=>' + C.catName
  from YourTable as T
    inner join C
      on T.CatID = C.parID
)
select catName
from C
where parID = -1

SEデータ

于 2012-05-18T06:01:40.400 に答える
1

部分的な答えとして、再帰クエリが必要なようです。これは、再帰クエリに関するいくつかの優れた情報を含むStackOverflowスレッドです。クエリを使用して単一の文字列に変換する方法については、わかりません...その部分はプログラミング言語用にさらに最適化されている可能性があります。

于 2012-05-18T05:38:18.600 に答える
1

関数を定義してから再帰ループで呼び出す必要があります。

MPTT (Modified Preorder Tree Traversal)を使用して、ネストされたツリーまたは階層データを格納できます。

この記事では、単一のクエリ内で階層的な「ブレッドクラム」を取得する方法について説明します。

于 2012-05-18T05:54:54.437 に答える