2017-12-14 14 views
2

すべての子ノードを親IDにマークする方法の例を教えてください。親の値が"need"のブランチにマークするだけで済みます(サンプルイメージを参照)。再帰クエリを使用して、特定の親のすべての子の名前を変更することはできません...親エレメントの子エレメントの名前を値で指定する方法は? SQLサーバー

初期データ:

+-----+----------+----------+ 
| id | parentid | selector | 
+-----+----------+----------+ 
| 1 |   |   | 
| 2 | 1  |   | 
| 3 | 1  | need  | 
| 4 | 2  |   | 
| 5 | 2  | need  | 
| 6 | 3  |   | 
| 7 | 5  |   | 
| 8 | 5  |   | 
| 9 | 6  |   | 
+-----+----------+----------+ 

は、データを必要とする:

+-----+----------+----------+----------------+ 
| id | parentid | selector | parentSelector | 
+-----+----------+----------+----------------+ 
| 1 | null  |   | null   | 
| 2 | 1  |   | null   | 
| 3 | 1  | need  | 3    | 
| 4 | 2  |   | null   | 
| 5 | 2  | need  | 5    | 
| 6 | 3  |   | 3    | 
| 7 | 5  |   | 5    | 
| 8 | 5  |   | 5    | 
| 9 | 6  |   | 3    | 
+-----+----------+----------+----------------+ 

タスクを作ることです親が値"need"を持つ要素によるグループ化。私は、上記の表の例のように、マーク付きの列を作成する必要がありますか、または他のオプションがありますか?条件付きparentSelectorを作るために、あなたが望むものを私が考える、さ

が、私はそれは、SQL Server 2012上で動作する場合、私が知っているdont't SQL Server 2012

Example

答えて

1

を使用しますが、私はこのmicrosoftを発見し、I CASE(Transact-SQL)を使用します。

これは別の例である:stackoverflow question

+0

問題は、階層的な選択で、ノード9に、我々はノード3を知らないと私は問題を理解している場合CASEを通じて、我々はこの... –

+0

を追跡することができないということです、あなたはこの[stackoverflow join](https://stackoverflow.com/questions/29795400/loop-join-in-sql-server-2008)のようなループ結合が必要です。 これはあなたが望むものを許可することができますが、これはテーブルがそれよりも大きい場合にサーバを遅くする可能性があります。 –

+0

私は、この例よりも構造(実際の木)が大きくなっているので、それは良い解決策だとは思わない。しかし、助けてくれてありがとう、私はこの方法を知っている –

関連する問題