3

SQL Server の "FOR XML" 機能は初めてです。SQL Server 2012 を使用しています。

Word と Word_Expansion の 2 つのテーブルがあります。

サンプルデータ:

表 [単語]:

WordOID   Word
-------   ----    
      1   PIPE
      2   WIRE

テーブル [Word_Expansion]:

WEOID  fk_WordOID  Word_Expansion
-----  ----------  --------------
    1          2             COAX
    2          2    SPEAKER CABLE
    3          1          CONDUIT

さて、次のような XML を作成したいと思います。

<expansion>
  <sub>WIRE</sub>
  <sub>SPEAKER CABLE</sub>
</expansion>
<expansion>
  <sub>PIPE</sub>
  <sub>CONDUIT</sub>
</expansion>

XML FOR ステートメントを作成するためにさまざまな努力を重ねてきましたが、これら 2 つのテーブルを適切な XML 出力にマッシュアップするために何をする必要があるのか​​、まったく理解できていないようです。XML FOR 構文をさらに掘り下げますが、時間があり、これをよく知っている場合は...

私が何を試すべきかについての指針はありますか?

4

2 に答える 2

3

これでうまくいくはずです:

SQL:

SELECT Word Sub,      
        (      
             SELECT Word_Expansion  AS Sub   
             FROM Word_Expansion WE
             WHERE WE.fk_WordOID = W.WordOID 
             FOR XML PATH(''), type 
        )      
FROM Word W
FOR XML PATH ('Expansion')   

XML 出力:

<Expansion>
  <Sub>Pipe</Sub>
  <Sub>CONDUIT</Sub>
</Expansion>
<Expansion>
  <Sub>Wire</Sub>
  <Sub>COAX</Sub>
  <Sub>SPEAKER CABLE</Sub>
</Expansion>

なぜWord.Wordを「サブ」として分類したいのかわかりませんが?これは代わりに Word_Expansion の親であるべきではありませんか (これはサブであるべきですか?)

編集: FOR XML とネストされたクエリを調べるときに、このリンクが非常に役立つことがわかりました。ネストされた FOR XML

于 2013-02-05T22:32:09.140 に答える
1

これが私のものです...彼が最速だったので最初の投稿に賛成しましたが、それは少し違うので、私のものを追加しても害はないと思いました...

With    groupedWords
As
(
        Select  WordOID, 
                Word
        From    Word
        Union   
        Select  fk_WordOID, Word_Expansion
        From    Word_Expansion
)
Select (Select  s.word As sub 
        From    groupedWords s 
        Where   s.WordOID = n.WordOID 
        For     Xml Path(''), Type)
From    groupedWords n
Group   By n.WordOID
For     Xml Path('expansion')
于 2013-02-05T22:50:33.563 に答える