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

Откуда:
Сообщений: 13
Здравствуйте. Есть шаблон xml, нужно выбрать данные из базы и подставить в этот шаблон.
Сам шаблон:
<DocumentItem>
         <ItemEntry>
            <LineItemNum>1</LineItemNum>
            <SellerItemCode>11111111</SellerItemCode>
            <GTIN>2222222</GTIN>
            <ItemDescription>Opisanie</ItemDescription>
            <ItemUnitRecord>
               <ItemUnit>KRB</ItemUnit>
               <AmountActual>50</AmountActual>
               <UnitNumerator>1</UnitNumerator>
               <UnitDenumerator>1</UnitDenumerator>
            </ItemUnitRecord>
            <BaseUnit>KRB</BaseUnit>
            <AmountInvoiced>50</AmountInvoiced>
            <ItemPrice>5.00</ItemPrice>
            <ItemSum>300.00</ItemSum>
            <VAT vatID="TAX">
               <SumBeforeVAT>300.00</SumBeforeVAT>
               <VATRate>0.00</VATRate>
               <VATSum>0.00</VATSum>
            </VAT>
            <ItemTotal>300.00</ItemTotal>
         </ItemEntry>
      </DocumentItem>


Тэг ItemEntry может повторяться т.е. должно быть как бы несколько групп ItemEntry. Как правильно это сделать? Может есть пример? Делаю вот так:
select 
					 (select
							'1' "LineItemNum"
							,'2111949' "SellerItemCode"
							,'XXXXXXXXXXXX' "GTIN"
							,'XXXXXXXXXXXXXXXXXXXX XXXXXXXXX' "ItemDescription"
							,(select
									'PCE' "ItemUnit"
									,'42' "AmountActual"
									,'1' "UnitNumerator"
									,'1' "UnitDenumerator"
							  for xml path ('ItemUnitRecord'), type
							 )
							 ,'PCE' "BaseUnit"
							 ,'42' "AmountInvoiced"
							 ,'6,57' "ItemPrice"
							 ,'275,94' "ItemSum"
							 ,(select
									'TAX' "@vatID"
									,'275,94' "SumBeforeVAT"
									,'21,000' "VATRate"
									,'0,00' "VATSum"
							  for xml path ('VAT'), type
							 )
							 ,'275,94' "ItemTotal"
					  for xml path ('ItemEntry'), type
					 )
			   for xml path ('DocumentItem'), type
			  


НО когда подставляю запрос который естественно возвращает несколько строк (Например LineItemNum несколько) получаю ошибку. Только начинаю изучать sql, помогите пожалуйста...
3 ноя 16, 11:46    [19854460]     Ответить | Цитировать Сообщить модератору
 Re: Выборка for xml группой  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 117
Если выборка из плоской таблицы, то что-то на подобии вот такого:
DECLARE @ItemEntry TABLE (LineItemNum int, SellerItemCode nvarchar(50), SumBefore money, Rate money, [Sum] money)

INSERT @ItemEntry
VALUES (1, '2111949', 300, 0, 0)
      ,(2, '9491112', 300, 0, 0)

SELECT LineItemNum
      ,SellerItemCode
      ,'TAX' AS 'VAT/@vatID'
      ,SumBefore AS 'VAT/SumBeforeVAT'
      ,Rate AS 'VAT/VATRate'
      ,[Sum] AS 'VAT/VATSum'
  FROM @ItemEntry
FOR XML PATH('ItemEntry'), ROOT('DocumentItem')
3 ноя 16, 12:16    [19854762]     Ответить | Цитировать Сообщить модератору
 Re: Выборка for xml группой  [new]
Narimunt
Member

Откуда:
Сообщений: 13
Sybex, спасибо огромное! Всё так, всё работает. Как-то не догадался иерархию строить с помощью "/".
3 ноя 16, 12:44    [19854962]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить