2015-01-28 5 views
1

Следующая SQLЭлемент группы другим элементом?

with t(a, b) as (select 1, 2 union all select 1, 3) 
select t.a as 'X/A/@Id', 
     t.b as 'X/A/b' 
from t 
for xml path(''), root('ROOT') 

возвращает

<ROOT> 
    <X> 
    <A Id="1"> 
     <b>2</b> 
    </A> 
    </X> 
    <X> 
    <A Id="1"> 
     <b>3</b> 
    </A> 
    </X> 
</ROOT> 

ли способ сгруппировать два <b> в <a> с момента Id (a) одинаковы? (Действительно ли это способ сделать это без использования подзапроса, если это возможно?) Прогнозный,

<ROOT> 
    <X> 
    <A Id="1"> 
     <b>2</b> 
     <b>3</b> 
    </A> 
    </X> 
</ROOT> 

ответ

0

Вы должны выбрать первый столбец во внешнем запросе, а второй столбец внутреннего запроса, а затем GROUP BY первый столбец.

;with t(a, b) as 
(
    select 1, 2 
    union all 
    select 1, 3 
) 
select t1.a as 'X/A/@Id', 
(
    SELECT T.B FROM T 
    WHERE T.a=t1.a 
    FOR XML PATH(''), type 
)as 'X/A' 
from t t1 
group by t1.a 
for xml path(''), root('ROOT') 
Смежные вопросы