powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL + XML... Вот...
3 сообщений из 3, страница 1 из 1
SQL + XML... Вот...
    #32071311
ale-805
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SQL + XML... Вот...
    #32071336
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно, чем не устраивает текущая реализации? Вроде, все нормально или ... договорите, что не договариваете.
...
Рейтинг: 0 / 0
SQL + XML... Вот...
    #32071393
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL + XML... Вот...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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