【发布时间】:2014-07-07 13:06:01
【问题描述】:
我在将 SQL 输出到 XML 时遇到了格式问题。
以下按预期工作:-
SELECT
AC.ACCOUNT AS 'Acct',
(SELECT ITEMNO AS 'ITEM'
FROM ITEMS AS ITEMS1 WITH(NOEXPAND)
WHERE ITEMS1.CODE = AC.CODE
FOR XML PATH ('Items'), TYPE)
FROM
AC WITH(NOLOCK)
INNER JOIN
ITEMS ON AC.CODE = ITEMS.CODE
FOR XML PATH (''), ROOT ('Accts'), ELEMENTS
输出以下 XML:
<Accts>
<Acct>94615130</Acct>
<Items>
<ITEM>1001</ITEM>
</Items>
<Items>
<ITEM>1050</ITEM>
</Items>
<Items>
<ITEM>1051</ITEM>
</Items>
<Items>
<ITEM>1054</ITEM>
</Items>
<Items>
<ITEM>1055</ITEM>
</Items>
....
</Accts>
但是当我像这样在子查询的 where 中添加一个额外的子句时:
SELECT
AC.ACCOUNT AS 'Acct',
(SELECT ITEMNO AS 'ITEM'
FROM ITEMS AS ITEMS1 WITH(NOEXPAND)
WHERE ITEMS1.CODE = AC.CODE
AND ITEMS1.ITEMNO = ITEMS.ITEMNO
FOR XML PATH ('Items'), TYPE)
FROM
AC WITH(NOLOCK)
INNER JOIN
ITEMS ON AC.CODE = ITEMS.CODE
FOR XML PATH (''), ROOT ('Accts'), ELEMENTS
我得到这个 xml 输出:
<Accts>
<Acct>94615130</Acct>
<Items>
<ITEM>28</ITEM>
</Items>
<Acct>94615130</Acct>
<Items>
<ITEM>36</ITEM>
</Items>
<Acct>94615130</Acct>
<Items>
<ITEM>114</ITEM>
</Items>
<Acct>94615130</Acct>
<Items>
<ITEM>161</ITEM>
</Items>
....
</Accts>
这不是我想要的。我需要像第一个示例中那样将所有项目分组在帐号下,而不是为每个项目重复帐号。
我使用的是 Microsoft SQL Server 2008,欢迎任何帮助。
【问题讨论】:
标签: sql sql-server xml sql-server-2008