2016-06-14 6 views
1

このサンプルを絶対必要最小限に減らしました。だから私はそれが私が知っているSELECT FOR XML文のASで列値を使用する方法

:-)意味がありません、私は次のクエリでテーブルからXMLを選択することができ、承知している:

select id as [Direction/@Id], 
     direction as [Direction] 
from devicepdo 
for xml path('') 

結果は次のようになります。

<Direction Id="1">I</Direction> 
<Direction Id="2">O</Direction>`` 
<Direction Id="3">I</Direction> 
<Direction Id="4">O</Direction> 
.... 

列の方向には常にIまたはOが含まれており、列の値に応じて囲むXMLタグを変更したいとします。

<In Id="1">I</In> 
<Out Id="2">O</Out>`` 
<In Id="3">I</In> 
<Out Id="4">O</Out> 
.... 

すべての私の試み句が失敗した「AS」に変数やcolumを使用する:

私の結果は次のようになります。私のクエリで

、「[方向/ID @]として」中「方向は、」列の値に応じて可変にする必要があります。

これは可能ですか?ヒントやアイデアは?

答えて

3

すべての属性がnullで、内容がnullの場合、タグは生成されません。このファクトを使用して、各行の値に応じて異なるタイプのタグを生成できます。

select 
    -- If direction is I then generate an In tag 
    case when direction = 'I' then id else null end as [In/@Id], 
    case when direction = 'I' then direction else null end as [In], 
    -- If direction is O then generate an Out tag 
    case when direction = 'O' then id else null end as [Out/@Id], 
    case when direction = 'O' then direction else null end as [Out] 
from devicepdo 
for xml path('') 

が効果的に、あなたはすべての可能なタグの表現を持っていますが、タグの種類が望まれていない行について、表現のヌルを作るためにcaseステートメントを使用します。

+0

あなたは私の一日を作った。このソリューションをありがとうございます!私は決してこれを見つけたことはありません! –

関連する問題