Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Оборотка одним запросом  [new]
alex;
Member

Откуда:
Сообщений: 101
Можно ли сделать оборотку за период по таблице операций одним запросом?
остаток1, приход, расход, остаток2

не используя подзапросы, CTE, udf, @Table
3 июн 16, 03:13    [19252699]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
aleks2
Guest
- Какая у вас скорость печати 10 пальцами?
- 400 символов в минуту! (в сторону: ну такая херня получается)

ЗЫ. Можно. Разрешаю.
3 июн 16, 06:00    [19252742]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
Jaffar
Member

Откуда:
Сообщений: 633
alex;,

конечно можно, аналитические функции вам в помощь.
только вот ост. 1(входящий на начало периода) придется считать с начала времен, если он нигде не хранится в разбивке по датам - что неправильно.
3 июн 16, 06:30    [19252750]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Да, входящие остатки надо хранить по периодам...
3 июн 16, 11:01    [19253520]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
alex;
Member

Откуда:
Сообщений: 101
с остатками-то понятно

вопрос чисто теоретический
понять насколько я отстал в новых функциях MS SQL

APPLY фактически использует udf собственно подзапросы

не знаю как это еще можно реализовать

думаю что это невозможно
3 июн 16, 13:33    [19254702]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
iljy
Member

Откуда:
Сообщений: 8711
alex;,

где структура таблицы операций?
есть ли таблица остатков?
Какая версия сервера?
не используя подзапросы - кореллированные? Или даже derived table? Откуда такое требование вообще - сессия на носу?
3 июн 16, 13:37    [19254727]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
alex;
APPLY фактически использует udf собственно подзапросы

смысл фразы ускользает
3 июн 16, 13:37    [19254729]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
alex;,

приход и расход можно хранить в одном поле (отличаются знаками).
Начальный и конечный остатки - в этом же поле (признак остатка в другом поле).
Получается простенький банальный SUM().
Даже если и не хранить в одном поле, всё равно - простенький SUM(), возможно, с CASE внутри
3 июн 16, 13:38    [19254734]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
invm
Member

Откуда: Москва
Сообщений: 9405
declare @t table (dt datetime, income int, outcome int);

insert into @t
values
 ('20160101', 2, 0),
 ('20160102', 0, 1),
 ('20160103', 2, 1),
 ('20160104', 0, 2),
 ('20160105', 1, 1),
 ('20160106', 1, 1),
 ('20160107', 2, 1);

select
 dt,
 sum(income - outcome) over (order by dt) - income + outcome,
 income, outcome,
 sum(income - outcome) over (order by dt)
from
 @t
order by
 dt;
3 июн 16, 13:43    [19254775]     Ответить | Цитировать Сообщить модератору
 Re: Оборотка одним запросом  [new]
alex;
Member

Откуда:
Сообщений: 101
invm,

спасибо понял куда копать

всем спасибо
3 июн 16, 14:02    [19254941]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить