powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
13 сообщений из 13, страница 1 из 1
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236083
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем помогите селектом
Есть таблица Платежи
Код: sql
1.
2.
3.
4.
5.
Pay_ID     --Уникалный ИЛ
Pay_Date  --Дата платежа
Pay_type   --Тип платеже   1(приход)   -1(расход)
Pay_Amount --Сумма платежа
Pay_SourceID --Назначение платежа  берется из справочника -- Оплата клиента  Оплата поставщику Прочее итд



Мне надо вытащит примерно так

ЯнварьФевраль Приход Оплата от клиента 100250 Расход Оплата поставщику 150200 Итог Сумма прихода 100250Сумма расхода 150200 Сальдо -5050Баланс с накоплением -500

Заранее благодарен
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236094
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RADSeatle,

накопительные суммы считаются так. Остальное допишешь.

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  Pay_Id,
  Pay_SourceID 
  Pay_Date,
  Pay_Amount,
  SUM(Pay_type * Pay_Amount) OVER(ORDER BY Pay_Date) AS Acc_Amount -- накопительный итог
FROM MyTable



таблицу лучше развернуть в клиенте
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236110
20 шт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RADSeatle,

Можно. Stored Procedure или Execute Block.
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236131
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно селектом не получится как я понял
Попробую через процедуру который возвращает 13 выходных параметров
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236202
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20 штRADSeatle,

Можно. Stored Procedure или Execute Block.
UNION ALL не подходит почему?
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236532
20 шт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock20 штRADSeatle,

Можно. Stored Procedure или Execute Block.
UNION ALL не подходит почему?
Кто ж мешает?
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236551
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
20 штКто ж мешает?
Не знаю. Тут вроде все сошлись на том, что
авторЯсно селектом не получится
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236557
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

можно-то можно. Другой вопрос что расположение по строкам/столбцам могут быть иными, но данные однозначно можно получить
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236721
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получился не очень через селектом но пока работает
теперь как добавить накопительный баланс как в пример
вот что получилось без накопительного баланса
Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
select 'Приход',
       ' ' as "January",
       ' ' as "February"
from rdb$database
union all
select a.source_id,
       sum(decode(extract(month from a.paydate),1,(a.amt),0)) as "January",
       sum(decode(extract(month from a.paydate),2,(a.amt),0)) as "February"
from TPAYMENTS_TEST a
where extract(year from a.paydate)='2016'
and  a.paytype=1
group by a.source_id
union all
select 'Расход',
       ' ' as "January",
       ' ' as "February"
from rdb$database
union all
select a.source_id,
       sum(decode(extract(month from a.paydate),1,(a.amt),0)) as "January",
       sum(decode(extract(month from a.paydate),2,(a.amt),0)) as "February"
from TPAYMENTS_TEST a
where extract(year from a.paydate)='2016'
and  a.paytype=-1
group by a.source_id
union all
select 'Итог',
       ' ' as "January",
       ' ' as "February"
from rdb$database
union all
select 'Сумма прихода',
       sum(decode(extract(month from a.paydate),1,(a.amt),0)) as "January",
       sum(decode(extract(month from a.paydate),2,(a.amt),0)) as "February"
from TPAYMENTS_TEST a
where extract(year from a.paydate)='2016'
and  a.paytype=1
union all
select 'Сумма расхода',
       sum(decode(extract(month from a.paydate),1,(a.amt),0)) as "January",
       sum(decode(extract(month from a.paydate),2,(a.amt),0)) as "February"
from TPAYMENTS_TEST a
where extract(year from a.paydate)='2016'
and  a.paytype=-1
union all
select 'Сальдо',
       sum(decode(extract(month from a.paydate),1,(a.paytype*a.amt),0)) as "January",
       sum(decode(extract(month from a.paydate),2,(a.paytype*a.amt),0)) as "February"
from TPAYMENTS_TEST a
where extract(year from a.paydate)='2016'



Если есть другой более оптимальный вариант покажите
заранее благодарен
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236751
20 шт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RADSeatle,

ну если SP создавать не желаешь - есть же EB. Почему нет?
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236776
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RADSeatle,

он не эффективен. Посмотри сколько раз ты перечитываешь одно и тоже. Лучше сделать один хороший запрос возвращающий всё в виде одной большой записи и добавить вспомогательные строки с помощью EXECUTE BLOCK или SP.

P.S. Год то зачем как строку записывать?
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236786
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RADSeatle,

Код: sql
1.
2.
3.
4.
5.
6.
7.
....
union all
select 'Баланс с накоплением',
       sum(IIF(extract(month from a.paydate) <= 1, a.paytype * a.amt, 0)) as "January",
       sum(IIF(extract(month from a.paydate) <= 2, a.paytype * a.amt, 0)) as "February"
from TPAYMENTS_TEST a
where extract(year from a.paydate)=2016



но я бы сделал по другому. См. выше
...
Рейтинг: 0 / 0
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
    #39236857
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо пока сойдет такой селект
пока учусь
Спасибо всем
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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