2012-09-24 46 views
1

我想執行一個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名稱 - 姓氏(helding上方位置ID)。

  2. 此外,有時Upperpostion可能爲空,執行報告時它將爲空。我想補充一個規則,如果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和我竟被喜歡誰從h_person,modelorg舉行這個USTPOZKOD(名字,姓氏)帶來」。

  4. USTPOZKOD也等於到POZKOD因爲有人helds這個位置

+3

你正在使用哪些DBMS? –

+0

Microsoft Server 2008 – user1694217

+1

比使用Flem的答案。 –

回答

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 
+0

讓我舉一個例子 在H_person表中 – user1694217