Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разборка маленького XML  [new]
Platonyan
Member

Откуда:
Сообщений: 29
Если не трудно помогите разобраться...

SET CONCAT_NULL_YIELDS_NULL ON;

declare @xml XML='<ROWDATA type="PP_Answer">
<PARTICIPIENT>
<Loan>
<ID>515844</ID>
<OutstandingDaysCount>
<Year name="2011">
<Month name="02">62</Month>
<Month name="08">75</Month>
</Year>
<Year name="2012">
<Month name="09">55</Month>
</Year>
</OutstandingDaysCount>
</Loan>
</PARTICIPIENT>
</ROWDATA>'

select  
        (
         select ID.value('.','nvarchar(20)') 
         from @xml.nodes('ROWDATA/PARTICIPIENT/Loan') as R(ROWDATA)
         cross apply R.ROWDATA.nodes('ID') as I(ID)
        ) as [ID]
       
       ,yYear.value('@name','nvarchar(20)') as [Year]
       
   from @xml.nodes('ROWDATA/PARTICIPIENT/Loan/OutstandingDaysCount') as R(ROWDATA)
         cross apply R.ROWDATA.nodes('Year') as Yea(yYear)


Написал select, возвращает ID и Year а вот Month правильно получить не удаеться.
Окончательный результат должен быть

   ID	Year	 Month   Days
515844 2011 02 62
515844 2011 08 75
515844 2012 09 55
6 сен 13, 10:00    [14802842]     Ответить | Цитировать Сообщить модератору
 Re: Разборка маленького XML  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
select 
   c.value('(../../../ID)[1]','varchar(10)') as [ID]
 , c.value('../@name','varchar(10)') as [Year]
 , c.value('@name','varchar(10)') as [Month]
 , c.value('.','varchar(10)') as [Days]
from  @xml.nodes('ROWDATA/PARTICIPIENT/Loan/OutstandingDaysCount/Year/Month') T(C)  
6 сен 13, 10:19    [14802927]     Ответить | Цитировать Сообщить модератору
 Re: Разборка маленького XML  [new]
Platonyan
Member

Откуда:
Сообщений: 29
LexusR спасибо вы правы.
У меня уже и вот так получилось

select  
        (
         select ID.value('.','nvarchar(20)') 
         from @xml.nodes('ROWDATA/PARTICIPIENT/Loan') as R(ROWDATA)
         cross apply R.ROWDATA.nodes('ID') as I(ID)
        ) as [ID]
       
       ,yYear.value('@name','nvarchar(20)') as [Year]
       ,mMonth.value('@name','nvarchar(20)') as [Month]
       ,mMonth.value('.','nvarchar(20)') as [Days]
   from @xml.nodes('ROWDATA/PARTICIPIENT/Loan/OutstandingDaysCount') as R(ROWDATA)
         cross apply R.ROWDATA.nodes('Year') as Yea(yYear)
         cross apply yYear.nodes('Month') as Mon(mMonth)
6 сен 13, 10:28    [14802970]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить