我有兩個表,一個是代碼,另一個是子映射表,用於代表與代碼表的父子關係。在SQL服務器中將層次結構表元素轉換爲xml格式
表:代碼
Code ID | Code Value | code Group | code Desc
1 Person 1 Accounts cashier
2 Person 2 Finance teller
3 Person 3 HR administrator
4 Person 4 IT system admin
表:映射
Id (Primarykey) | code ID | Parent Code ID (both code ID and parent code ID are foreign keys with codes table
1 1 Null
2 2 1
3 3 1
4 4 Null
5 3 4
我需要一個輸出
<Codes>
<CodeParent group = "Accounts">
<ChildCodes group= "Finance">
<CodeParent name = "person 2" desc = "teller"/>
</ChildCodes>
<ChildCodes group = "HR">
<CodeParent name = "Person 3" desc = "Administrator"/>
<ChildCodes>
</CodeParent >
<CodeParent group = "IT>
<ChildCodes group = "HR">
<CodeParent name = "Person 3" desc = "Administrator"/>
<ChildCodes>
</CodeParent >
</Root>
我用這個SQL函數嘗試,但它似乎並沒有給正確的期望輸出
ALTER FUNCTION dbo.GetPartsSubTree(@PartNumberID int)
RETURNS XML
BEGIN RETURN
(SELECT codeMappingTable.codeID AS "@codeID",
codes.codeLiteral AS "@codeLiteral",
codes.codeGroup AS "@codeGroup",
dbo.GetPartsSubTree(codeMappingTable.codeID)
FROM codeMappingTable,codes
WHERE [email protected] and codes.codeID = codeMappingTable.codeID
ORDER BY codeMappingTable.codeID
FOR XML PATH('CodeParent'),ROOT('ChildCodes'),TYPE)
END
GO
SELECT codeMappingTable.codeID AS "@codeID",
codes.codeLiteral AS "@codeLiteral",
codes.codeGroup AS "@codeGroup",
dbo.GetPartsSubTree(codeMappingTable.codeID)
FROM codeMappingTable,codes
WHERE codeMappingTable.ParentcodeID is null and codes.codeID = codeMappingTable.codeID
ORDER BY codeMappingTable.codeID
FOR XML PATH('CodeParent'),ROOT('Codes'),TYPE
請幫我解決這個問題。
在一個更大的尺度的期望輸出是如下:
<Codes>
<codeGroup codeGroup="Entity">
<CodeParent codeID="18" codeDesc="Borrower" codeGroup="Entity">
<ChildCodes codeGroup="Fin Reporting Type">
<CodeParent codeID="20" codeDesc="Financial Statement - Annual" codeGroup="Fin Reporting Type" />
<CodeParent codeID="21" codeDesc="Tax Returns" codeGroup="Fin Reporting Type" />
</ChildCodes>
<ChildCodes codeGroup="Covenant Type">
<CodeParent codeID="24" codeDesc="Capital Expenditures" codeGroup="Covenant Type" />
<CodeParent codeID="25" codeDesc="Cash Flow Coverage Ratio" codeGroup="Covenant Type" />
</ChildCodes>
</CodeParent>
<CodeParent codeID="17" codeDesc="Guarantor" codeGroup="Entity">
<ChildCodes codeGroup="Fin Reporting Type">
<CodeParent codeID="20" codeDesc="Financial Statement - Annual" codeGroup="Fin Reporting Type" />
<CodeParent codeID="22" codeDesc="Brokerage Statements" codeGroup="Fin Reporting Type" />
</ChildCodes>
<ChildCodes codeGroup="Covenant Type">
<CodeParent codeID="27" codeDesc="Current Ratio" codeGroup="Covenant Type" />
<CodeParent codeID="28" codeDesc="Debt Service Coverage Ratio" codeGroup="Covenant Type" />
</ChildCodes>
</CodeParent>
</codeGroup>
<codeGroup codeGroup="Entity Category">
<CodeParent codeID="4" codeDesc="Company" codeGroup="Entity Category">
<ChildCodes codeGroup="AFS Obligor Type">
<CodeParent codeID="9" codeDesc="American Subsidiary or Agency of Japanese TR Co" codeGroup="AFS Obligor Type">
<ChildCodes codeGroup="test type">
<CodeParent codeID="29" codeDesc="xyz" codeGroup="test type" />
<CodeParent codeID="30" codeDesc="www" codeGroup="test type" />
</ChildCodes>
</CodeParent>
<CodeParent codeID="11" codeDesc="Cooperative" codeGroup="AFS Obligor Type" />
<CodeParent codeID="13" codeDesc="Corporation" codeGroup="AFS Obligor Type" />
</ChildCodes>
</CodeParent>
<CodeParent codeID="8" codeDesc="Individual" codeGroup="Entity Category">
<ChildCodes codeGroup="AFS Obligor Type">
<CodeParent codeID="1" codeDesc="US Bancorp Employee" codeGroup="AFS Obligor Type" />
<CodeParent codeID="3" codeDesc="US Bancorp Officer" codeGroup="AFS Obligor Type" />
</ChildCodes>
</CodeParent>
<CodeParent codeID="5" codeDesc="LLC" codeGroup="Entity Category" />
<CodeParent codeID="6" codeDesc="Trust" codeGroup="Entity Category">
<ChildCodes codeGroup="AFS Obligor Type">
<CodeParent codeID="1" codeDesc="US Bancorp Employee" codeGroup="AFS Obligor Type" />
</ChildCodes>
</CodeParent>
</codeGroup>
<codeGroup codeGroup="Category">
<CodeParent codeID="31" codeDesc="cat1" codeGroup="Category" />
<CodeParent codeID="32" codeDesc="cat2" codeGroup="Category" />
<CodeParent codeID="33" codeDesc="cat3" codeGroup="Category" />
</codeGroup>
<codeGroup codeGroup="Facility">
<CodeParent codeID="34" codeDesc="cat1" codeGroup="Facility" >
<ChildCodes codeGroup="BorrowerType">
<CodeParent codeID="40" codeDesc="Employee" codeGroup="BorrowerType" />
<CodeParent codeID="41" codeDesc="Officer" codeGroup="BorrowerType" />
</ChildCodes>
</CodeParent>
<CodeParent codeID="35" codeDesc="cat2" codeGroup="Facility" />
<CodeParent codeID="36" codeDesc="cat3" codeGroup="Facility" />
</codeGroup>
<codeGroup codeGroup="Loan">
<CodeParent codeID="37" codeDesc="cat1" codeGroup="Loan" >
<ChildCodes codeGroup="BorrowerType">
<CodeParent codeID="40" codeDesc="Employee" codeGroup="BorrowerType" />
<CodeParent codeID="41" codeDesc="Officer" codeGroup="BorrowerType" />
</ChildCodes>
</CodeParent>
<CodeParent codeID="38" codeDesc="cat2" codeGroup="Loan" />
<CodeParent codeID="39" codeDesc="cat3" codeGroup="Loan" />
</codeGroup>
</Codes>
我想你的代碼的Mikael,它的工作原理然而,當我有它無法處理它,例如見下文 – Hema 2011-03-30 15:27:17
我想你的代碼的Mikael表中多個嵌套條目,它的工作原理然而,當我有多個嵌套條目(5,'Person 5','Accounts','accountant') 插入@Codes 值(6,'Person 6','Finance' ','Investbanker') 插入@Mapping值(6,5,null) 插入@Mapping值(7,6,1) 它爲帳戶創建多個節點併爲財務創建多個節點 – Hema 2011-03-30 15:41:14
@Hema - 已更新回答你的新數據。您在第一個「accounts」節點「Finance」下添加了一個新的根項目「accounts」和新項目。那不是你想要的嗎?如果不是,請用輸入數據和預期輸出更新您的問題。 – 2011-03-30 16:41:19