Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос из подтаблицы с нарастающим итогом, проблема с одной ситуацией. / 5 сообщений из 5, страница 1 из 1
12.02.2024, 20:56
    #40138449
Newber
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из подтаблицы с нарастающим итогом, проблема с одной ситуацией.
Пытаюсь написать запрос tsql (MSSQL), который принимает в качестве параметра идентификатор продукта и количество (всегда > 0), и выбирает транзакции, соответствующие этой сумме количества, в порядке убывания по дате. (включая строки с остатком от вычитания)

Например, если я хочу выбрать товар номер 1 с количеством 10 штук. Скрипт должен выбрать все связанные и отсортированные транзакции на эту сумму, даже если в сумме их будет больше 10. (1+3+0+10 >стоп!)
Код: SQL
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.
create table #items(itemid int, qtySum money)
insert into #items values
(1,10),
(2,33),
(3,15),
(4,3 ),
(5,3),
(6,15),
(7,15)

create table #transactions(itemid int, trid int, trdate date, qty money)
insert into #transactions values
(1,1,'20240212',1),
(1,2,'20240211',3),
(1,3,'20240211',0),
(1,4,'20240210',10),
(1,5,'20240209',10),
(1,6,'20240208',1),
(2,7,'20240212',22),
(2,8,'20240211',11),
(2,9,'20240210',-5),
(2,10,'20240210',-4),
(2,11,'20240209',9),
(2,12,'20240209',4),
(2,13,'20240209',6),
(3,15,'20240212',10),
(3,16,'20240211',-2),
(3,17,'20240210',-3),
(3,18,'20240209',8),
(3,19,'20240208',4),
(3,20,'20240207',2),
(4,21,'20240212',5),
(5,22,'20240212',3),
(5,23,'20240211',3),
(5,24,'20240210',3),
(7,25,'20240212',0)
Пытаюсь решить свою задачу с CTE.
Но есть загвоздка.
Для ID=2 выбираются строки 7,8,10,11
А мне надо только 7 и 8
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
;WITH cte AS
( SELECT i.itemid,i.qtySum as iQuantity,tr.trid,tr.qty as trQuantity,
SUM(tr.qty) OVER (partition by i.itemid ORDER BY tr.trdate desc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS sum_amount

  FROM #items i
  inner join #transactions tr on i.itemid=tr.itemid and tr.qty<>0
)

SELECT *
FROM cte
WHERE  sum_amount-iQuantity<trQuantity
union
select i.itemid,i.qtySum, NULL, NULL, NULL from #items i where not exists(select top 1 1 from cte c where c.itemid=i.itemid)

drop table #items
drop table #transactions
2024-02-12_20-54-34.png
Кто-нибудь сталкивался с такой задачей?
...
Рейтинг: 0 / 0
04.04.2024, 23:40
    #40138553
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из подтаблицы с нарастающим итогом, проблема с одной ситуацией.
А это принципиально, что бы через CTE?
Код: SQL
1.
2.
3.
4.
select * from #items as i join #transactions as t
on i.itemid = t.itemid
Where i.itemid = 2
and 10 <= t.qty
itemid qtySum itemid trid trdate qty
2 33,00 2 7 2024-02-12 22,00
2 33,00 2 8 2024-02-11 11,00
...
Рейтинг: 0 / 0
28.04.2024, 19:06
    #40138586
Александр2454
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из подтаблицы с нарастающим итогом, проблема с одной ситуацией.
Newber [игнорируется] 

Проектирование реляционной базы данных - это ключевой этап при создании информационной системы. В процессе работы над нашим проектом мы обратились к профессионалам с https://database-design.ru/, и результат превзошел все ожидания! Их эксперты обладают исключительными знаниями в области баз данных, что позволило нам создать оптимальную и эффективную структуру для хранения информации. Сотрудничество с данной компанией - залог успешного развития вашего бизнеса. При необходимости консультации по проектированию базы данных, обращайтесь именно сюда!
...
Рейтинг: 0 / 0
05.06.2024, 08:48
    #40138648
tomcat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из подтаблицы с нарастающим итогом, проблема с одной ситуацией.
Newber [игнорируется] 

старый добрый курсор Вам в помощь
...
Рейтинг: 0 / 0
05.06.2024, 11:37
    #40138649
tomcat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос из подтаблицы с нарастающим итогом, проблема с одной ситуацией.
Newber [игнорируется] 

кстати если условие сделать просто qty>0 то вроде получаются как Вы хотели
sql.PNG
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос из подтаблицы с нарастающим итогом, проблема с одной ситуацией. / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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