2

SQL テーブルから XML としてデータを取得しようとしています。次の表を検討してください。

                  Customers      
Id      Last      First      Phone1      Phone2  
10      Doe       John      555-2121    555-6145
33     Smith      Sally     555-3333    555-7000

SQL で FOR XML 句を使用して、Last、First、Phone1、および Phone2 フィールドを取得したいと考えています。ただし、属性が「夕方」の Phone2 フィールドを取得したいと考えています。たとえば、XML は次のようになります。

<Customers>   
  <Customer>
        <Last>Doe</Last>
        <First>John</First>
        <Phone Type="Daytime">555-2121</Phone>
        <Phone Type="Evening">555-6145</Phone>   
  </Customer> 
</Customers>  

しかし、私はそれを機能させることができません。足りないものはありますか?どんな助けでも大歓迎です!

4

1 に答える 1

3

サブクエリでノードを構築できます。を指定するfor xml typeと、サブクエリは外側のクエリとマージされ、1 つの XML になります。

select  Last as [Last]
,       First as [First]
,       (
        select  'Daytime' as [@Type]
        ,       Phone1 as [*]
        for xml path('Phone'), type
        )
,       (
        select  'Evening' as [@Type]
        ,       Phone2 as [*]
        for xml path('Phone'), type
        )
from    Customers
for xml path('Customer'), root('Customers')

これは以下を出力します:

<Customers>
    <Customer>
        <Last>Doe</Last>
        <First>John</First>
        <Phone Type="Daytime">555-2121</Phone>
        <Phone Type="Evening">555-6145</Phone>
    </Customer>
    <Customer>
        <Last>Smith</Last>
        <First>Sally</First>
        <Phone Type="Daytime">555-3333</Phone>
        <Phone Type="Evening">555-7000</Phone>
    </Customer>
</Customers>

SQL Fiddle での実例。

于 2012-06-25T19:16:46.187 に答える