2015-06-29 67 views
2

我试图加入一个SQL查询三个表来输出格式为XML 下面是我的查询:SQL到XML格式化

select 
    invoices.order_no as "order", 
    customerinfo.name as BillingCompanyName, 
    line.item_code, 
    line.item_qty 
from 
    invoices 
inner join 
    customerinfo on customerinfo.cust_code = invoices.cust_code 
inner join 
    line on line.order_no = invoices.order_no 
where 
    invoices.custlog10 = 'f' and invoices.order_no = '332504' 
for xml auto, type, elements 

,这里是生成的输出

<invoices> 
    <order>332504</order> 
    <customerinfo> 
    <BillingCompanyName>Two Bear Farm</BillingCompanyName> 
    <line> 
     <item_code>2909-B</item_code> 
     <item_qty>2.000000</item_qty> 
    </line> 
    <line> 
     <item_code>SH-DISC</item_code> 
     <item_qty>1.000000</item_qty> 
    </line> 
    </customerinfo> 
</invoices> 

此输出大多数情况下,我只是用于移动customerinfo标记结束的位置,如下面以粗体显示:

<invoices> 
    <order>332504</order> 
    <customerinfo> 
    <BillingCompanyName>Two Bear Farm</BillingCompanyName> 
    </customerinfo> 
    <line> 
     <item_code>2909-B</item_code> 
     <item_qty>2.000000</item_qty> 
    </line> 
    <line> 
     <item_code>SH-DISC</item_code> 
     <item_qty>1.000000</item_qty> 
    </line> 
</invoices> 

此代码旨在提供给第三方模块以读取销售订单。

我是新来的SQL输出作为XML和解决此格式问题的任何帮助将是太棒了!

回答

0

这样做的一种方式是通过相关查询与,你可以采取更多的控制权格式显式路径:

select 
    invoices.order_no as "order", 

    (select customerinfo.name as 'BillingCompanyName' 
    from customerinfo where 
    customerinfo.cust_code=invoices.cust_code 
    for xml path('customerinfo'), type, elements 
    ), 

    (select line.item_code, line.item_qty 
    from line where line.order_no = invoices.order_no 
    for xml path('line'), type, elements) 
from 
    invoices 
where 
    invoices.custlog10 = 'f' and invoices.order_no = '332504' 
for xml path('invoices') 

SQLFIDDLE

+0

PERFECTO!谢谢,它像梦一样工作! – user2379391