Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL + XML... Вот... / 3 сообщений из 3, страница 1 из 1
22.11.2002, 13:13:20
    #32071311
ale-805
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL + XML... Вот...
SQL...
Добрый всем привет из офф-лайна! Есть проблемка (и мне кажется, что довольно распространенная и типичная), которую, в принципе, мне известно как решить, но чую всеми фибрами души, что можно решить это красивее.
Вобщем так.. В БД хранится информация о списании товаров в следующем виде:
Table.RegSpis:
product_id storage_id reason_id quantity
1 1 1 10
1 2 1 20
2 2 2 30
и т.д..., то есть списывается некоторое количество (quantity) товаров (products) со складов (storages) по определенным причинам списания (reasons). Для товаров, складов и причин, ессссно, существуют свои справочники.
Так вот, мне необходимо информацию эту получить в следующем отображении (XML):
<rs>
<reason id="1">
<storage id="1">
<product id="1">
<quantity>10</quantity>
</product>
</storage>
<storage id="2">
<product id="1">
<quantity>20</quantity>
</product>
</storage>
</reason>
<reason id="2">
<storage id="2">
<product id="2">
<quantity>30</quantity>
</product>
</storage>
</reason>
</rs>
Вот...
Вообще полный рекордсет можно получить запросом вида:

SELECT RegSpis.prod_id,
RegSpis.storage_id storage_id,
RegSpis.reason_id reason_id,
sum(RegSpis.quantity) prih
FROM RegSpis(NOLOCK)
GROUP BY RegSpis.reason_id, RegSpis.storage_id, RegSpis.product_id

Я так понимаю, что если последовательно делать GROUP BY сначала по первому полю, потом по первому+по второму и т.д., то можно получить требуемый результат, но мне кажется, что можно исхитриться и сделать это проще и красивее. БД: MS SQL Server 2000, сервер на ASP. Может можно, зная все уровни группировки ("reason", "storage", "product"), сформировать на сервере какой-нить хитрый запрос, который поможет это сделать?
Заранее огромное спасибо всем!
...
Рейтинг: 0 / 0
22.11.2002, 13:44:41
    #32071336
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL + XML... Вот...
Непонятно, чем не устраивает текущая реализации? Вроде, все нормально или ... договорите, что не договариваете.
...
Рейтинг: 0 / 0
22.11.2002, 15:06:19
    #32071393
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL + XML... Вот...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
SET NOCOUNT ON
GO

CREATE TABLE dbo.RegSpis (product_id int, storage_id int, reason_id int, quantity int)
GO

insert dbo.RegSpis values ( 1 ,  1 ,  1 ,  10 )
insert dbo.RegSpis values ( 1 ,  2 ,  1 ,  20 )
insert dbo.RegSpis values ( 2 ,  2 ,  2 ,  30 )
GO

SELECT DISTINCT 
        1          as Tag, 
       NULL      as Parent,
       reason_id as [reason! 1 !id],
       NULL as [storage! 2 !id],
       NULL as [product! 3 !id],
       NULL as [quantity! 4 !!element]
  FROM dbo.RegSpis

UNION ALL

SELECT  2 , 
        1 ,
       reason_id,
       storage_id,
       NULL,
       NULL
  FROM dbo.RegSpis
 GROUP BY reason_id, storage_id

UNION ALL

SELECT  3 , 
        2 ,
       reason_id,
       storage_id,
       product_id,
       NULL
  FROM dbo.RegSpis
 GROUP BY reason_id, storage_id, product_id

UNION ALL

SELECT  4 , 
        3 ,
       reason_id,
       storage_id,
       product_id,
       sum(quantity)
  FROM dbo.RegSpis
 GROUP BY reason_id, storage_id, product_id
 ORDER BY [reason! 1 !id], [storage! 2 !id]

  FOR XML EXPLICIT
GO

DROP TABLE dbo.RegSpis 
GO
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL + XML... Вот... / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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