如何获取分层数据

时间:2012-09-24 11:58:56

标签: sql hierarchical-data

我想执行一个SQL语句,有两个表

Table Name      Description
*********      *********
H_person    Employee Data
Modelorg    Position Data

我想写一个显示“谁与谁联系”的sql。在h_person表中

Fıeld Name      Description
*********      *********
p_no        Employee ID
P_ad        Employee Name
P_soyad Employee Surname
P_pzsyn Employee Position ID

在Modelorg表中

Fıeld Name      Description
*********      *********
Pozkod      Position ID
Pozad       Position Name
USTPOZKOD   the upper position (POZKOD connected to USTPOZKOD)

USTPOZKOD也是POZKOD的同时,还有层次连接。

  1. 我想形成一个报告,显示人员ID,姓名,姓氏,职位名称,上部职位名称,经理ID和Maneger名称 - 姓氏(帮助上位置ID)。

  2. 此外,有时Upperpostion可能为空,并且在执行报告时,它将为null。我想添加一个规则,如果upperposition为null,则带上2级上层经理

    在H_person表中 第一数据 * ** * ** P_no = 14556 P_ad =约翰 p_Soyad = Onel P_Pzsyn = 72878 /客户专员 第二数据 P_no = 14656 P_AD =萨拉 p_Soyad = Yildiz P_Pzsyn = 5455 /客户经理 * ** * **  在Modelorg表中 Pozkod = 72878 Pozad =帐户专员 Ustpozkod = 5455(客户经理)USTPOZKOD同时也是一个pozkod。

  3. 选择p_no,p_ad,p_soyad,Pozad,USTPOZKOD(我们将pozkod连接到USTPOZKOD,我想带来“谁持有这个USTPOZKOD(NAME,姓氏)来自h_person,modelorg。

  4. USTPOZKOD也等于POZKOD,因为有人担任此职位

1 个答案:

答案 0 :(得分:1)

您需要使用common table expression (CTE)来构建递归查询。

一个例子:

WITH #rec AS
(
    SELECT ID, ParentID
    FROM RecTable
    WHERE ParentID = 0

    UNION ALL

    SELECT R.ID, R.ParentID
    FROM RecTable R
    INNER JOIN #rec P ON R.ParentID = P.ID
)
SELECT *
FROM #rec