2014-01-29 86 views
0

我正在研究pic基本(yippee)並將其轉換爲.NET的報告。最終報告如下。該表(僅顯示一部分數據以保持簡單)具有ParentID(ID)和其中的ChildID,並基本上連接到沒有可用的ChildID(NULL)。我寫了一個我認爲可以正常運行的程序,但坐着並沒有返回任何類型的結果。 SQL不是我的強項。分層產品結構

報告

0......... SA33028 
1........ 42S0131 
1........ 5S0127 
1........ 6S0175 
1........ SA33023 
    2....... 16S0142 
    2....... 18S0103 
    2....... 24S0108 
    2....... 28SM0105 
    2....... S30461.AI 
    2....... S30463 
    3...... S28807 
    3...... S28807 
    2....... S30641 
    2....... S31134 
    2....... S9383 
    2....... SA29801 
    3...... 16S0116 
    3...... S27798 
    3...... S31170 
    3...... SA30059 
    4..... 38S0116 
    4..... 7S0105 
    4..... S19430.145 
    5.... 7SM0145 
     6... 7SM0145.001 
     6... 7SM0145.002 
    5.... S19430 
    4..... S19431 
    2....... SA30910 

表:

ParentID  ChildID 
SA33028 42S0131 
SA33028 5S0127 
SA33028 6S0175 
SA33028 79S0101 
SA33028 S11870 
SA33028 S30151 
SA33028 SA33023 
SA33028 SA33029 
SA33023 S30463 
S30463 S28807 

SQL過程:

ALTER PROCEDURE [dbo].[getHierarchy] 
@Parent VARCHAR(20) 

AS 
BEGIN 

SET NOCOUNT ON; 

WITH AllParts([PSNbr], [ChildID], [ParentID]) 
AS 
(
SELECT Child.Parent_Part AS PSNbr, 
Child.Parent_Part AS ChildID, 
Parent.Parent_Part AS ParentID 
FROM ps AS Child 
LEFT OUTER JOIN ps AS Parent 
ON Child.Component_Part = Parent.Parent_Part 

UNION ALL 

SELECT AllParts.PSNbr AS PSNbr, 
    AllParts.ParentID AS ChildID, 
    NewParent.Component_Part AS ParentID 
FROM AllParts 
INNER JOIN PS AS NewParent 
ON AllParts.ParentID = NewParent.Parent_Part 
    AND AllParts.ParentID <> AllParts.ChildID 
INNER JOIN PS as NewParentInfo 
ON NewParent.Component_Part = NewParentInfo.Parent_Part 

) 
SELECT AllParts.[PSNbr], 
     AllParts.[ParentID] 
FROM AllParts 
WHERE PSNbr = @Parent; 
+0

SQL語句的結果需要看起來像爲了生成報告嗎? – eoldre

+0

像例子中的初始報告一樣。哪裏有0-x#級。 – user3249420

回答

0

在KISS原則的榮譽,我應問。你如何測試程序?你只是打了F5或從SQL內部運行它?嘗試突出顯示從「開始」到您的「結束」,然後擊中F5。 (另外,上面的示例中沒有「END」)

+0

是的,我試過了,它會慢慢長大並永遠運行。 45分鐘後我終於殺死了。這張桌子裏有大約580,000條記錄,我的意思並不大,但也不算很糟糕。而且它現在正在返回的數據是不正確的,因爲它正在給予關聯部門的倍數。 – user3249420

+0

您的表格樣本具有ParentID的重複值。此外,左連接和聯合都易於導致重複。嘗試逐個刪除這些作品,並查看重複結果何時刪除。 – PCSgtL

+0

我會給它一個。起始級別(@Parent ='SA33​​028')將具有多個parentID,因爲它們具有不同的子級。我將搜索一個特定的起始parentID,然後從那裏分支出去。我可能最終不得不做一個循環序列來以某種方式得到一切。 – user3249420