1
我需要將以下XML解析爲每天的客戶事務處理表。 XML文件來自不受我控制的外部服務。在SQL Server 2012中使用不存在的元素解析XML內容
問題是,當客戶當天沒有交易,我無法在我的表格中查看它。我如何才能看到客戶零交易?
declare @xml xml =
'<root>
<customers>
<customer id="777">
<orders>
<order currency="USD" id="888" date="2014-06-18">
<transactions>
<transaction id="998">
<date>2014-08-01</date>
<itemid>10001</itemid>
<amount>745.96</amount>
</transaction>
</transactions>
</order>
</orders>
</customer>
<customer id="778">
<orders>
<order id="999" />
</orders>
</customer>
</customers>
</root>'
我改造的查詢是這樣的:
select
newid() ID,
ltrim(rtrim(B.C.value('@id', 'nvarchar(50)'))) CUSTOMER_ID,
ltrim(rtrim(K.C.value('@id', 'nvarchar(450)'))) ACCOUNT_ID,
ltrim(rtrim(K.C.value('@date', 'datetime'))) DATE_PLACED,
ltrim(rtrim(K.C.value('@currency', 'nvarchar(50)'))) CURRENCY,
ltrim(rtrim(T.C.value('@id', 'nvarchar(50)'))) TRANSACTION_ID,
ltrim(rtrim(T.C.value('date[1]', 'datetime'))) TRANSACTION_DATE,
ltrim(rtrim(T.C.value('itemid[1]', 'nvarchar(50)'))) TRANSACTION_ITEMID,
ltrim(rtrim(T.C.value('amount[1]', 'money'))) TRANSACTION_BANK_CODE
from
@xml.nodes('/root/customers/customer') as B(C)
outer apply B.C.nodes('/root/customers/customer/orders/order') as K(C)
outer apply K.C.nodes('/root/customers/customer/orders/order/transactions/transaction') as T(C)
where
ltrim(rtrim(b.c.value('@id', 'nvarchar(50)'))) = ltrim(rtrim(k.c.value('../../@id', 'nvarchar(50)')))
and
(
(
t.c.value('../../@id','nvarchar(50)') is not null
and
ltrim(rtrim(k.c.value('@id','nvarchar(50)'))) = ltrim(rtrim(t.c.value('../../@id','nvarchar(50)')))
)
or (ltrim(rtrim(t.c.value('../../@id','nvarchar(50)'))) is null)
)
預先感謝您!
的幫助下,我與「/命令/命令」,由於它沒有工作,嘗試了「與你在哪裏開始」,已經放棄了這一想法。現在刪除第一個反斜線,它的工作!謝謝! – 2014-10-27 12:58:02