0
我一直被困在這個問題上近2天..在最底層是我想到的,但我似乎無法得到格式正確。任何幫助將不勝感激。SQL Server XML格式
這裏的問題是:
--Axis data
create TABLE tmpPrimaryAxisLeaves
(
NodeID int,
NodeLabel nvarchar(max)
)
create TABLE tmpSecondaryAxisLeaves
(
NodeID int,
NodeLabel nvarchar(max)
)
create TABLE tmpTertiaryAxisLeaves
(
NodeID int,
NodeLabel nvarchar(max)
)
INSERT INTO tmpPrimaryAxisLeaves (NodeID, NodeLabel)
SELECT 1, 'North America' UNION
SELECT 2, 'South America' UNION
SELECT 3, 'EU' UNION
SELECT 4, 'Africa' UNION
SELECT 5, 'Russia'
INSERT INTO tmpSecondaryAxisLeaves (NodeID, NodeLabel)
SELECT 10, 'Peter Pan' UNION
SELECT 20, 'Groot' UNION
SELECT 30, 'Batman'
INSERT INTO tmpTertiaryAxisLeaves (NodeID, NodeLabel)
SELECT 2, 'Shirts' UNION
SELECT 4, 'Pants' UNION
SELECT 6, 'Hats'
--Contract data
create table tmpContracts
(
StartDate datetime,
EndDate datetime,
PrimaryAxisID int,
SecondaryAxisID int,
TertiaryAxisID int,
LanguageID int
)
INSERT INTO tmpContracts (StartDate, EndDate, PrimaryAxisID, SecondaryAxisID, TertiaryAxisID, LanguageID)
SELECT '1/1/2010', '1/1/2018', 1, 20, 2, 1 UNION
SELECT '1/1/2010', '1/1/2018', 1, 20, 2, 2 UNION
SELECT '1/1/2010', '1/1/2018', 1, 20, 2, 5 UNION
SELECT '1/1/2010', '1/1/2018', 1, 20, 6, 1 UNION
SELECT '1/1/2010', '1/1/2018', 1, 20, 6, 2 UNION
SELECT '1/1/2010', '1/1/2018', 1, 20, 6, 5 UNION
SELECT '1/1/2011', '1/1/2020', 2, 20, 2, 1 UNION
SELECT '1/1/2011', '1/1/2020', 2, 20, 2, 3 UNION
SELECT '1/1/2011', '1/1/2020', 2, 20, 4, 1 UNION
SELECT '1/1/2011', '1/1/2020', 2, 20, 4, 3 UNION
SELECT '1/1/2011', '1/1/2020', 2, 20, 4, 5 UNION
SELECT '1/1/2011', '1/1/2020', 3, 30, 2, 1 UNION
SELECT '1/1/2011', '1/1/2020', 4, 30, 6, 1
--Langauges
create table tmpLanguages
(
LanguageID int,
Name nvarchar(100)
)
INSERT INTO tmpLanguages
SELECT 1, 'English' UNION
SELECT 2, 'Spanish' UNION
SELECT 3, 'French' UNION
SELECT 4, 'Russia' UNION
SELECT 5, 'Dutch'
寫一個查詢,將採取上述數據,並在下面的格式與在指示的每個位置(「[XXXXX]」)的正確值返回XML結果謹這個:
<AvailabiltyList>
<PrimaryNode>
<NodeID>[PrimaryAxis.NodeID]</NodeID>
<NodeLabel>[PrimaryAxis.NodeLabel]</NodeLabel>
<SecondaryAxis>
<SecondaryNode>
<NodeID>[SecondaryAxis.NodeID]</NodeID>
<NodeLabel>[SecondaryAxis.NodeLabel]</NodeLabel>
<TertiaryAxis>
<TertiaryNode>
<NodeID>[TertiaryAxis.NodeID]</NodeID>
<NodeLabel>[TertiaryAxis.NodeLabel]</NodeLabel>
<ContractData>
<ContractDataPoint>
<ContractStart>[Contracts.StartDate]</ContractStart>
<ContractEnd>[Contracts.EndDate]</ContractEnd>
</ContractDataPoint>
</ContractData>
<Languages>[Comma delimited list of languages for the matching contracts]</Languages>
</TertiaryNode>
<TertiaryNode>....</TertiaryNode>
<TertiaryNode>....</TertiaryNode>
<TertiaryNode>....</TertiaryNode>
</TertiaryAxis>
</SecondaryNode>
<SecondaryNode>...</SecondaryNode>
<SecondaryNode>...</SecondaryNode>
<SecondaryNode>...</SecondaryNode>
<SecondaryNode>...</SecondaryNode>
</PrimaryNode>
<PrimaryNode>...</PrimaryNode>
<PrimaryNode>...</PrimaryNode>
<PrimaryNode>...</PrimaryNode>
</AvailabilityList>
這是我想到的..但我似乎無法得到格式正確。
select
PrimaryNode.NodeID as pnode,
PrimaryNode.NodeLabel as plabel,
SecondaryNode.NodeID as snode,
SecondaryNode.NodeLabel as slabel,
TertiaryNode.NodeID as tnode,
TertiaryNode.NodeLabel as tlable,
ContractDataPoint.StartDate,
ContractDataPoint.EndDate
from
tmpContracts ContractDataPoint
left join
tmpPrimaryAxisLeaves PrimaryNode on ContractDataPoint.PrimaryAxisID = PrimaryNode.NodeID
inner join
tmpSecondaryAxisLeaves SecondaryNode on ContractDataPoint.SecondaryAxisID = SecondaryNode.NodeID
inner join
tmpTertiaryAxisLeaves TertiaryNode on ContractDataPoint.TertiaryAxisID = TertiaryNode.NodeID
group by
PrimaryNode.NodeID, PrimaryNode.NodeLabel,
SecondaryNode.NodeID, SecondaryNode.NodeLabel,
TertiaryNode.NodeID, TertiaryNode.NodeLabel,
ContractDataPoint.StartDate, ContractDataPoint.EndDate
for xml auto, Root('AvailabiltyList'), Elements
我的結果:
<AvailabiltyList>
<PrimaryNode>
<pnode>1</pnode>
<plabel>North America</plabel>
<SecondaryNode>
<snode>20</snode>
<slabel>Groot</slabel>
<TertiaryNode>
<tnode>2</tnode>
<tlable>Shirts</tlable>
<ContractDataPoint>
<StartDate>2010-01-01T00:00:00</StartDate>
<EndDate>2018-01-01T00:00:00</EndDate>
</ContractDataPoint>
</TertiaryNode>
<TertiaryNode>
<tnode>6</tnode>
<tlable>Hats</tlable>
<ContractDataPoint>
<StartDate>2010-01-01T00:00:00</StartDate>
<EndDate>2018-01-01T00:00:00</EndDate>
</ContractDataPoint>
</TertiaryNode>
</SecondaryNode>
</PrimaryNode>
<PrimaryNode>
<pnode>2</pnode>
<plabel>South America</plabel>
<SecondaryNode>
<snode>20</snode>
<slabel>Groot</slabel>
<TertiaryNode>
<tnode>2</tnode>
<tlable>Shirts</tlable>
<ContractDataPoint>
<StartDate>2011-01-01T00:00:00</StartDate>
<EndDate>2020-01-01T00:00:00</EndDate>
</ContractDataPoint>
</TertiaryNode>
<TertiaryNode>
<tnode>4</tnode>
<tlable>Pants</tlable>
<ContractDataPoint>
<StartDate>2011-01-01T00:00:00</StartDate>
<EndDate>2020-01-01T00:00:00</EndDate>
</ContractDataPoint>
</TertiaryNode>
</SecondaryNode>
</PrimaryNode>
<PrimaryNode>
<pnode>3</pnode>
<plabel>EU</plabel>
<SecondaryNode>
<snode>30</snode>
<slabel>Batman</slabel>
<TertiaryNode>
<tnode>2</tnode>
<tlable>Shirts</tlable>
<ContractDataPoint>
<StartDate>2011-01-01T00:00:00</StartDate>
<EndDate>2020-01-01T00:00:00</EndDate>
</ContractDataPoint>
</TertiaryNode>
</SecondaryNode>
</PrimaryNode>
<PrimaryNode>
<pnode>4</pnode>
<plabel>Africa</plabel>
<SecondaryNode>
<snode>30</snode>
<slabel>Batman</slabel>
<TertiaryNode>
<tnode>6</tnode>
<tlable>Hats</tlable>
<ContractDataPoint>
<StartDate>2011-01-01T00:00:00</StartDate>
<EndDate>2020-01-01T00:00:00</EndDate>
</ContractDataPoint>
</TertiaryNode>
</SecondaryNode>
</PrimaryNode>
</AvailabiltyList>
您能顯示所需的輸出格式嗎?到底什麼是錯誤的? – Fiddles
你好......我剛剛添加了它應該看起來像上面的那樣......結果應該看起來像這樣 – tbailey922