1

次の形式のデータがあります。

   user          Id         Value
   -------------------------------
   a             50000        5              
   a             50000        6   
   a             50000        7   
   b             50001        8   
   b             50001        9   
   b             50001        10

次の形式でフォーマットされた XML を取得したい

 <RootNode> 
     <User "a"> 
       <UserAttribute Id="50000" value="5"/>
       <UserAttribute Id="50000" value="6"/> 
       <UserAttribute Id="50000" value="7"/> 
     </User> 
     <User "b">
       <UserAttribute Id="50001" value="8"/> 
       <UserAttribute Id="50001" value="9"/> 
       <UserAttribute Id="50001" value="10"/> 
     </User>
 </RootNode>

次の選択クエリを試しました:

select 
   [user] as '@user', 
   [id] as 'UserAttribute/@id',
   [value] as 'UserAttribute/@value' 
from 
   dbo.test 
for xml path('User')

しかし、必要な出力が得られません。誰かが私に何が欠けているか教えてもらえますか?

現在の出力:

<User user="a">
  <UserAttribute id="50000" value="5" />
</User>
<User user="a">
  <UserAttribute id="50000" value="6" />
</User>
<User user="a">
  <UserAttribute id="50000" value="7" />
</User>
<User user="b">
  <UserAttribute id="50001" value="8" />
</User>
<User user="b">
  <UserAttribute id="50001" value="8" />
</User>
<User user="b">
  <UserAttribute id="50001" value="8" />
</User>
4

1 に答える 1

0

テストデータ

DECLARE @TABLE TABLE ([user] CHAR(1),Id INT, Value INT)
INSERT INTO @TABLE VALUES
('a',50000,5),              
('a',50000,6),   
('a',50000,7),   
('b',50001,8),   
('b',50001,9),   
('b',50001,10)

クエリ

SELECT t.[user]        AS [@User]
       ,(SELECT Id     AS [@Id]
                ,Value AS [@Value]
         FROM @TABLE 
         WHERE [user] = t.[user]
         FOR XML PATH('UserAttribute'), TYPE)
FROM @TABLE t
GROUP BY t.[user]
FOR XML PATH('User'), ROOT('RootNode')

結果:

<RootNode>
  <User User="a">
    <UserAttribute Id="50000" Value="5" />
    <UserAttribute Id="50000" Value="6" />
    <UserAttribute Id="50000" Value="7" />
  </User>
  <User User="b">
    <UserAttribute Id="50001" Value="8" />
    <UserAttribute Id="50001" Value="9" />
    <UserAttribute Id="50001" Value="10" />
  </User>
</RootNode>

ノート

ユーザータグには属性として [User] 値が必要です。目的の出力に示されているように、タグに文字を追加することはできません。<User "a">これは XML の有効な形式ではありません。私の出力に示されているように、属性として [User] 値が必要です。<User User="a">

于 2014-05-10T01:24:17.823 に答える