我已将此样本减少到绝对必要的最小值。所以我知道,它没有意义: - )
我知道,我可以使用以下查询从表中选择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>
....
我试图在&#34; AS&#34;中使用变量或列。条款失败。
在我的查询中,&#34; 方向&#34; in&#34; as [ Direction / @ Id]&#34;应根据列值变化。
这可能吗?任何提示或想法?
答案 0 :(得分: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
语句使表达式为null。