我有两个表,一个是代码,另一个是子映射表,用于代表与代码表的父子关系。在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