上午,
我正在尝试从SQL查询格式化一些XML输出,我正在努力。我目前拥有的SQL类似于此,我已经更改了表和列的名称:
SELECT *
FROM ReportTable p with (nolock)
LEFT OUTER JOIN Table1 s with (nolock) on s.UID = p.UID
LEFT OUTER JOIN Table2 o with (nolock) on o.UID = p.UID
LEFT OUTER JOIN Table3 ct with (nolock) on ct.UID = p.UID
WHERE p.UID = 1194
FOR XML AUTO, ELEMENTS
这给了我以下输出:
<p>
<UID>1194</UID>
<pCol1>Value</pCol1>
<pCol2>Value</pCol2>
<pCol3>Value</pCol4>
<pCol4>Value</pCol4>
<s>
<UID>1194</UID>
<sCol1>Value</sCol1>
<sCol2>Value</sCol2>
<sCol3>Value</sCol3>
<o>
<ct>
<UID>1194</UID>
<ctCol1>Value</ctCol1>
<ctCol2>Value</ctCol2>
</ct>
</o>
</s>
</p>
这不是我所追求的,我真正需要的是:
<p>
<UID>1194</UID>
<pCol1>Value</pCol1>
<pCol2>Value</pCol2>
<pCol3>Value</pCol4>
<pCol4>Value</pCol4>
<s>
<UID>1194</UID>
<sCol1>Value</sCol1>
<sCol2>Value</sCol2>
<sCol3>Value</sCol3>
</s>
<o>
</o>
<ct>
<UID>1194</UID>
<ctCol1>Value</ctCol1>
<ctCol2>1</ctCol2>
</ct>
</p>
是否只是我必须更改我的SQL以便它使用子查询,或者我错过了一些令人惊讶的SQL语句?
理想情况下,该解决方案还需要适用于2000年以上的SQL Server版本。
感谢。
答案 0 :(得分:0)
使用XML PATH
SELECT
p.*,
s.sCol1 as 's/sCol1',
o.oCol1 as 'o/oCol1'
FROM p
LEFT OUTER JOIN s on s.UID = p.UID
LEFT OUTER JOIN o on o.UID = p.UID
FOR XML PATH