Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь по XML / 10 сообщений из 10, страница 1 из 1
22.03.2018, 15:47
    #39618993
Katrine_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
С проблемой выгрузки данных в XML я столкнулась впервые и сразу прошу тапками не кидать, и если это где-то уже было, просто перенаправить туда.
База MSSQl 2014
Необходимо из нее сделать XML-файл следующей структуры:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	<doc>
		<doccode>накладная1</doccode>
		<num>0001</num>
		<attribut1>...</attribut1>
		<attribu2t>...</attribut1>
			...
		<body>
			<item>
				<tovar>Товар1</tovar>
				<quantity>1</quantity>
				<price>500.00</price>
			</item>
			<item>
				<tovar>Товар2</tovar>
				<quantity>2</quantity>
				<price>2000.00</price>
			</item>
				...
		</body>
		<doccode>накладная2</doccode>
			...
 
Данные хранятся в одной таблице фактов. Для каждого товара в таблице хранятся все данные из шапки документа. Попробовала разные варианты, получилось применить FOR XML PATH
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
      [doc_id] as doccode
      ,[doc_no] as num
        ...
      ,[nomenk_id] as "body/item/tovar"
      ,[kol] as "body/item/quantity"
      ,[price] as "body/item/price"
  FROM [dbo].[tbl_fact]
  where priznak=3
    FOR XML path ('doc')


И у меня получилось следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	<doc>
		<doccode>накладная1</doccode>
		<num>0001</num>
		<attribut1>...</attribut1>
		<attribu2t>...</attribut1>
			...
		<body>
			<item>
				<tovar>Товар1</tovar>
				<quantity>1</quantity>
				<price>500.00</price>
			</item>
		</body>
		<doccode>накладная1</doccode>
			...
		<body>
			<item>
				<tovar>Товар2</tovar>
				<quantity>2</quantity>
				<price>2000.00</price>
			</item>
		</body>
			...
 
Как можно переписать запрос так, чтобы все товары, принадлежащие к одной накладной были под нее сгруппированы?
...
Рейтинг: 0 / 0
22.03.2018, 15:51
    #39618997
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
сделайте пример с вашими входящими данными, а то лень сочинять за вас
...
Рейтинг: 0 / 0
22.03.2018, 15:56
    #39619002
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select 
...
(
select 
   items.nomenk_id as tovar, ...
FROM tbl_fact items
FOR XML PATH('item'), root('body'), elements, type
)
FOR XML PATH('doc')
...
Рейтинг: 0 / 0
22.03.2018, 16:02
    #39619011
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select 
      [doc_id] as 'doccode'
      ,[doc_no] as 'num'
     ...
(
select 
   items.nomenk_id as 'tovar', 
   items.[kol] as 'quantity',
   items.[price] as 'price'
FROM tbl_fact items
FOR XML PATH('item'), root('body'), elements, type
)
FROM [dbo].[tbl_fact]
Where priznak=3
FOR XML path ('doc')



дальше сами
...
Рейтинг: 0 / 0
22.03.2018, 16:03
    #39619013
Katrine_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
Таблица фактов выглядит следующим образом, если вы об этом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
       doc_id     | doc_no |    date     | contragent  |.... | nomenk_id | kol | price
| Накладная1 | 0001    | 01-02-18 | ИП Пупкин | ... | Товар 1     | 5    |  100-00
| Накладная1 | 0001    | 01-02-18 | ИП Пупкин | ... | Товар 2     | 10  |  200-00
| Накладная1 | 0001    | 01-02-18 | ИП Пупкин | ... | Товар 3     | 2    | 500-00
| Накладная2 | 0002    | 05-02-18 | ООО Мир   | ... | Товар 4     | 3    | 300-00
| Накладная2 | 0002    | 05-02-18 | ООО Мир   | ... | Товар 1     | 1    | 150-00

...
Рейтинг: 0 / 0
22.03.2018, 16:05
    #39619016
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
нет,я о чём то таком:
Код: sql
1.
2.
3.
4.
declare @t table (id int, ...)

insert into @t (id, ...)
values (...), (...)
...
Рейтинг: 0 / 0
22.03.2018, 16:39
    #39619029
AlanDenton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
DECLARE @t TABLE (doc_id NVARCHAR(100), doc_no NVARCHAR(100), nomenk_id NVARCHAR(100), kol INT, price MONEY)
INSERT INTO @t
VALUES (N'Накладная1', N'0001', N'Товар 1', 5 , 100)
     , (N'Накладная1', N'0001', N'Товар 2', 10, 200)
     , (N'Накладная1', N'0001', N'Товар 3', 2 , 500)
     , (N'Накладная2', N'0002', N'Товар 4', 3 , 300)
     , (N'Накладная2', N'0002', N'Товар 1', 1 , 150)

SELECT *
, (
    SELECT tovar = t2.nomenk_id
         , quantity = t2.kol
         , t2.price
    FROM @t t2
    WHERE t2.doc_id = t.doc_id
    FOR XML PATH ('item'), ROOT('body'), TYPE
)
FROM (
    SELECT DISTINCT doc_id, doc_no
    FROM @t
) t
FOR XML PATH ('doc'), ROOT('docs')


Кроме того советую посмотреть видео (вам это поможет в дальнейшем при работе с XML):
[spoiler] ссылка
YouTube Video
...
Рейтинг: 0 / 0
22.03.2018, 16:42
    #39619030
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
ну всю малину испортил =)
...
Рейтинг: 0 / 0
22.03.2018, 16:45
    #39619032
AlanDenton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
Konst_One, сорри. Сейчас митинг, чтобы мозгами не поехать нужно было себя чем-то занять.
Katrine_S, изучайте матчасть :) XML штука крайне веселая
...
Рейтинг: 0 / 0
23.03.2018, 13:45
    #39619497
Katrine_S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по XML
Спасибо огромное, помогло.
Вчера весь день читала эту самую матчасть...
Видео обязательно посомтрю
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь по XML / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]