powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос for xml explicit
9 сообщений из 9, страница 1 из 1
Запрос for xml explicit
    #39976353
Инна_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дан запрос SELECT dbo.Headers.ordernumber, dbo.Headers.orderdate, dbo.Headers.deliveryaddress as address, dbo.Lines.linenumber, dbo.Lines.quantity, dbo.Lines.price, dbo.Lines.article as articlecode
FROM dbo.Headers LEFT JOIN dbo.Lines ON dbo.Lines.ordernumber = dbo.Headers.ordernumber
where dbo.Lines.quantity = 2 and dbo.Lines.price = 2.20

Данные нужно представить в формате:
<orders>
<order>
<header>
<ordernumber>1</ordernumber>
<orderdate>DD.MM.YYYY</orderdate>
<address>Адрес</address>
</header>
<lines>
<line>
<linenumber>1</linenumber>
<article @quantity="2" @price="2.20">articlecode</article>
</line>
...
</lines>
</order>
...
</orders>

Мои наработки:

Select 1 as tag,
NULL as parent,
dbo.Headers.ordernumber as 'order!1!ordernumber!element',
NULL as 'header!2!dbo.Headers.orderdate!element',
NULL as 'header!2!dbo.Headers.deliveryaddress!element'
from dbo.Headers
unionall
select 2 as tag,
2 as parent,
header.dbo.Lines.ordernumber,
linenumber,
article
from dbo.Lines
where dbo.Lines.ordernumber = dbo.Headers.ordernumber and
dbo.Lines.quantity = 2 and dbo.Lines.price = 2.20
order by 'order!1!ordernumber!element',
'header!2!dbo.Headers.orderdate!element',
'header!2!dbo.Headers.deliveryaddress!element'
for xml explicit, TYPE, ROOT ('orders')

Ошибка Сообщение 4104, уровень 16, состояние 1, строка 3
Не удалось привязать составной идентификатор "dbo.Headers.ordernumber".

Помогите, пожалуйста, убрать ошибку
...
Рейтинг: 0 / 0
Запрос for xml explicit
    #39976357
Инна_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доработала запрос до уровня
SELECT
dbo.Headers.ordernumber AS 'header/ordernumber',
orderdate AS 'header/orderdate',
dbo.Headers.deliveryaddress AS 'header/address'
FROM dbo.Headers
UNION ALL
SELECT
dbo.Lines.linenumber AS 'lines/line/linenumber',
dbo.Lines.quantity AS 'lines/line/quantity',
dbo.Lines.price AS 'lines/line/price',
dbo.Lines.article AS 'lines/line/articlecode'
FROM dbo.Lines
LEFT JOIN dbo.Headers ON dbo.Lines.ordernumber = dbo.Headers.ordernumber
FOR XML PATH('order'), TYPE, ELEMENTS, ROOT('orders')

Выдает ошибку

Все запросы, объединенные с помощью операторов UNION, INTERSECT или EXCEPT, должны иметь одинаковое число выражений в целевых списках.
...
Рейтинг: 0 / 0
Запрос for xml explicit
    #39976373
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select
 h.ordernumber as [header/ordernumber],
 h.orderdate as [header/orderdate],
 h.deliveryaddress as address as [header/address],
 l.x as lines
from
 dbo.Headers h cross apply
 (
  select
   linenumber, quantity, article as articlecode dbo.Lines
  where
   ordernumber = h.ordernumber and
   quantity = 2 and price = 2.20
  for xml path('line'), type
 ) l(x)
for xml path('order'), root('orders'), type;
...
Рейтинг: 0 / 0
Запрос for xml explicit
    #39976384
Инна_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Сообщение 156, уровень 15, состояние 1, строка 4
Неправильный синтаксис около ключевого слова "as".
Сообщение 102, уровень 15, состояние 1, строка 10
Неправильный синтаксис около конструкции "dbo".
...
Рейтинг: 0 / 0
Запрос for xml explicit
    #39976388
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инна_B,

Ну у вас же место ошибки подчекнуто. Могли бы и догадаться, что from пропущен.
...
Рейтинг: 0 / 0
Запрос for xml explicit
    #39976389
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инна_B,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select
 h.ordernumber as [header/ordernumber],
 h.orderdate as [header/orderdate],
 h.deliveryaddress as [header/address],
 l.x as lines
from
 dbo.Headers h cross apply
 (
  select
    linenumber, quantity, article as articlecode 
  from dbo.Lines
  where
    ordernumber = h.ordernumber and
    quantity = 2 and price = 2.20
  for xml path('line'), type
 ) l(x)
for xml path('order'), root('orders'), type;
...
Рейтинг: 0 / 0
Запрос for xml explicit
    #39976399
Инна_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Massa52, спасибо, вы очень помогли.

Я немного изменила
select
h.ordernumber as 'header/ordernumber',
h.orderdate as 'header/orderdate',
h.deliveryaddress as 'header/address',
l.x as lines
from
dbo.Headers h cross apply
(
select
dbo.Lines.linenumber AS 'linenumber',
dbo.Lines.quantity AS "article/@quantity",
dbo.Lines.price AS "article/@price",
dbo.Lines.article AS "article/@articlecode"

from dbo.Lines
where
ordernumber = h.ordernumber and
quantity = 2 and price = 2.20
for xml path('line'), type
) l(x)
for xml path('order'), root('orders'), type;
...
Рейтинг: 0 / 0
Запрос for xml explicit
    #39976404
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инна_B,

Это надо благодарить invm.
...
Рейтинг: 0 / 0
Запрос for xml explicit
    #39976406
Инна_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,
спасибо большое!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос for xml explicit
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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