2011-03-29 30 views
1

這裏是我的XML看起來像:獲取分組數據使用XQuery - SQL服務器2008

<Company xmlns ="http://abc.com/rules"> 
<Employee id="E1" number="0000007535"> 
    <Payment disposition="Open" type="ABC" amount_paid="100.00" /> 
    <Payment disposition="Closed" type="XYZ" amount_paid="468.00" /> 
    <Payment disposition="Open" type="AOD" amount_paid="156.00" /> 
    <Payment disposition="Closed" type="ONB" amount_paid="2834.00" /> 
</ Employee > 
<Employee id="E1" number="0000007536"> 
    <Payment disposition="Open" type="DFG" amount_paid="200.00" /> 
    <Payment disposition="Closed" type="HFK" amount_paid="568.00" /> 
</ Employee > 
<Employee id="E1" number="0000007537"> 
    <Payment disposition="Open" type="TTT" amount_paid="600.00" /> 
    <Payment disposition="Closed" type="BBB" amount_paid="368.00" /> 
</ Employee > 
<Employee id="E2" number="0000007541"> 
    <Payment disposition="Open" type="EEE" amount_paid="0.00" /> 
    <Payment disposition="Closed" type="WWW" amount_paid="568.00" /> 
    <Payment disposition="Closed" type="GHW" amount_paid="968.00" /> 
</ Employee > 
<Employee id="E2" number="0000007542"> 
    <Payment disposition="Open" type="QQQ" amount_paid="140.00" /> 
    <Payment disposition="Closed" type="CCC" amount_paid="68.00" /> 
</ Employee > 
<Employee id="E3" number="0000007551"> 
    <Payment disposition="Open" type="AAA" amount_paid="300.00" /> 
    <Payment disposition="Closed" type="TTT" amount_paid="668.00" /> 
</ Employee > 
</ Company> 

我需要得到所有的支付方式爲每個員工

一些事情,如:

E1 0000007535公開賽ABC 100.00

E1 0000007536關閉XYZ 468.00

......

E2 0000007541打開EEE 0.00
....

但是,下面的代碼給我只能Dispositon,類型和AmountPaid我不能夠把它映射到每個員工。

;WITH XMLNAMESPACES (DEFAULT 'http://abc.com/rules') 
select Disposition,Type,AmountPaid from 
     EMPLOYEE 
    OUTER APPLY 
    ( 
    SELECT 
    tbl.col.value('(@disposition)[1]','varchar(20)') AS Disposition, 
    tbl.col.value('(@type)[1]','varchar(20)') AS Type, 
    tbl.col.value('(@amount_paid)[1]','varchar(20)') AS AmountPaid 

    FROM xmldocument.nodes('//Employee/Payment') AS tbl(col) 

)Z 
WHERE xmlid = 500 

感謝 BB

回答

2

我真的不明白這個XML如何與XmlDocument的列在你的EMPLOYEE表。 xml是否在員工中的行之間進行拆分,或者一名員工是否在xml中有多個員工?無論如何,這是一種查詢您提供的XML的方法。也許你可以使用它並適應你的情況。

declare @xmldocument xml = ' 
<Company xmlns="http://abc.com/rules"> 
    <Employee id="E1" number="0000007535"> 
     <Payment disposition="Open" type="ABC" amount_paid="100.00"/> 
     <Payment disposition="Closed" type="XYZ" amount_paid="468.00"/> 
     <Payment disposition="Open" type="AOD" amount_paid="156.00"/> 
     <Payment disposition="Closed" type="ONB" amount_paid="2834.00"/> 
    </Employee> 
    <Employee id="E1" number="0000007536"> 
     <Payment disposition="Open" type="DFG" amount_paid="200.00"/> 
     <Payment disposition="Closed" type="HFK" amount_paid="568.00"/> 
    </Employee> 
    <Employee id="E1" number="0000007537"> 
     <Payment disposition="Open" type="TTT" amount_paid="600.00"/> 
     <Payment disposition="Closed" type="BBB" amount_paid="368.00"/> 
    </Employee> 
    <Employee id="E2" number="0000007541"> 
     <Payment disposition="Open" type="EEE" amount_paid="0.00"/> 
     <Payment disposition="Closed" type="WWW" amount_paid="568.00"/> 
     <Payment disposition="Closed" type="GHW" amount_paid="968.00"/> 
    </Employee> 
    <Employee id="E2" number="0000007542"> 
     <Payment disposition="Open" type="QQQ" amount_paid="140.00"/> 
     <Payment disposition="Closed" type="CCC" amount_paid="68.00"/> 
    </Employee> 
    <Employee id="E3" number="0000007551"> 
     <Payment disposition="Open" type="AAA" amount_paid="300.00"/> 
     <Payment disposition="Closed" type="TTT" amount_paid="668.00"/> 
    </Employee> 
</Company>' 

;with xmlnamespaces(default 'http://abc.com/rules') 
select 
    p.value('../@id', 'varchar(10)'), 
    p.value('../@number', 'varchar(10)'), 
    p.value('@disposition', 'varchar(10)'), 
    p.value('@type', 'varchar(10)'), 
    p.value('@amount_paid', 'varchar(10)') 
from @xmldocument.nodes('Company/Employee/Payment') n(p) 

結果

---------- ---------- ---------- ---------- ---------- 
E1   0000007535 Open  ABC  100.00 
E1   0000007535 Closed  XYZ  468.00 
E1   0000007535 Open  AOD  156.00 
E1   0000007535 Closed  ONB  2834.00 
E1   0000007536 Open  DFG  200.00 
E1   0000007536 Closed  HFK  568.00 
E1   0000007537 Open  TTT  600.00 
E1   0000007537 Closed  BBB  368.00 
E2   0000007541 Open  EEE  0.00 
E2   0000007541 Closed  WWW  568.00 
E2   0000007541 Closed  GHW  968.00 
E2   0000007542 Open  QQQ  140.00 
E2   0000007542 Closed  CCC  68.00 
E3   0000007551 Open  AAA  300.00 
E3   0000007551 Closed  TTT  668.00 
+0

謝謝了..這就像魅力。 – BumbleBee 2011-03-30 17:01:40