2011-11-08 104 views
1

我們繼承了管理分層報告結構的應用程序的支持。 表結構是:層次結構的SQL管理

id_from,id_to,active,value ..所以實質上是四層樹。

一個例子是:

A B 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 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 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

我知道你有一個表,假設報告(同上,值1,值2,...),而另一個關係(FromDataId,ToDataId) 。爲什麼你的關係有一個價值列? –

+0

你的例子有點混亂!我不認爲這是一個公認的模型!它看起來有點像嵌套集合結構。 – Daniel

+0

嗨'爲什麼你的關係有一個價值列......'這是一個非常簡化的實際結構模型 - 所以很難解釋完整的細節..一切都是我們無法改變的,我們只需要瞭解如何管理它。 – user641399

回答

1

嘗試:Recursive Queries Using Common Table Expressions

SQL Server的一個偉大的寶石,自SQL Server 2005後可用。這是我的任何涉及SQL Server層次結構的goto。

的CTE查詢的結構是這樣的:

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

use results and join with other tables, if needed