2

我正在尝试生成如下所示的 xml:

<caption nr="1000">
    <lang code="EN">Brussels</lang>
    <lang code="FR">Bruxelles</lang>
</caption>
<caption nr="2000">
    <lang code="EN">Antwerp</lang>
    <lang code="FR">Anvers</lang>
</caption>

我在 sql 数据库中拥有所有必要的信息,如下所示(sql server 2005):

fld_pcd_cod               fld_pcd_gem             fld_pcd_tal
-------------------------------------------------------------
1000                      Brussels                 EN
1000                      Bruxelles                FR
2000                      Antwerp                  EN
2000                      Anvers                   FR 

我用 group by 语句、子查询、distintc 等尝试了许多 sql 查询……我只是无法理解它。

这是我能得到的最好的可行解决方案。但这不是我想要的,因为我必须制作一个新的 XSD。

<lang cap="1000" code="FR">BRUXELLES</lang>
<lang cap="1000" code="EN">BRUSSELS</lang>
<lang cap="2000" code="FR">ANVERS</lang>
<lang cap="2000" code="EN">ANTWERP</lang>

这是我用来实现上述 xml 节点的查询

SELECT fld_pcd_cod as 'lang/@cap', fld_pcd_tal as 'lang/@code', fld_pcd_gem as 'lang'
FROM tbl_pcd
for XML path(''), type

你们有人对如何解决这个问题有建议吗?

4

1 回答 1

1

caption通过 on 获取具有 group by的节点fld_pcd_cod并进入lang相关子查询。

select T1.fld_pcd_cod as "@nr",
       (
       select T2.fld_pcd_tal as "@code",
              T2.fld_pcd_gem as "*"
       from tbl_pcd as T2
       where T1.fld_pcd_cod = T2.fld_pcd_cod
       for xml path('lang'), type
       )
from tbl_pcd as T1
group by T1.fld_pcd_cod
for xml path('caption')
于 2013-03-15T09:32:38.173 回答