2011-11-08 22 views
1

階層的な報告構造を管理するアプリケーションのサポートを継承しました。 テーブル構造は次のとおりです。階層のSQL管理

id_from、id_to、active、value ..本質的に4つの層のツリーです。

例である:我々は

id_from, Id_to, active, Value 
    A B  Y  . 
    B C  Y  . 
    C D  Y  item q 
    C E  Y  item r 
    C F  Y  item s 
    B G  Y  . 
    G H  Y  item t 

を保持するテーブルで

A B C D -> item q 
A B C E -> item r 
A B C F -> item s 
A B G H -> item t 

だから私たちは一度だけ、それぞれ独自のペアリングを保持しています。 構造に対して多くの変更をプログラムで実行する必要があるという問題があります。 一例がある:

A B C D -> item q 

ことになる:

A T C D -> item q 

ように、データセットは次のようになる。

A T C D -> item q 
A B C E -> item r 
A B C F -> item s 
A B G H -> item t 

したがってテーブルが

id_from, Id_to, active, Value 
A T Y 
T C Y 
A B Y 
B C Y 
C D Y item q 
C E Y item r 
C F Y item s 
B G Y 
G H Y item t 

これの通りであろう例これはcではないツリーがまだA B C DとA T C Dのリンクを生成するので

実際には他のCの値を別のものに変更する必要があります。

id_from, Id_to, active, Value 
A T Y 
T C Y 
A B Y 
B Cx Y 
C D Y item q 
Cx E Y item r 
Cx F Y item s 
B G Y 
G H Y item t 

これは私たちが見る多くの問題のほんの一例ですが、この構造が認識されたモデルであるかどうか疑問です。 したがって、構造を管理するための一般的なアルゴリズムを提供するリンクがあります。

+0

私はあなたがテーブルを持って理解し、の報告書(ID、値1、値2、...)と、別の関係を言わせて(FromDataId、ToDataId) 。あなたの関係になぜ価値列があるのですか? –

+0

あなたの例はちょっと混乱しています!私はこれが認識されたモデルだとは思わない!ネストしたセット構造のように見えます。 – Daniel

+0

こんにちは 'あなたの関係には値の列があるのはなぜですか?'これは実際の構造の非常に単純化されたモデルなので、詳細を説明するのは難しいでしょう。単にそれを管理する方法を理解する必要があります。 – user641399

答えて

1

試行:Recursive Queries Using Common Table Expressions

SQL Serverの素晴らしい宝物の1つで、SQL Server 2005以降で使用できます。これはSQL Serverの階層に関係するすべてのものです。

CTEクエリの構造がこのようなものになる:

With <define derived table> 
<do ground level hierarchy query> 
join 
<all child elements>; 

use results and join with other tables, if needed