Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ? / 13 сообщений из 13, страница 1 из 1
15.05.2016, 19:01
    #39236083
RADSeatle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
Привет всем помогите селектом
Есть таблица Платежи
Код: 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
15.05.2016, 19:17
    #39236094
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
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
15.05.2016, 19:48
    #39236110
20 шт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
RADSeatle,

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

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

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

можно-то можно. Другой вопрос что расположение по строкам/столбцам могут быть иными, но данные однозначно можно получить
...
Рейтинг: 0 / 0
16.05.2016, 16:16
    #39236721
RADSeatle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
Получился не очень через селектом но пока работает
теперь как добавить накопительный баланс как в пример
вот что получилось без накопительного баланса
Код: 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
16.05.2016, 16:38
    #39236751
20 шт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
RADSeatle,

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

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

P.S. Год то зачем как строку записывать?
...
Рейтинг: 0 / 0
16.05.2016, 17:07
    #39236786
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
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
16.05.2016, 18:40
    #39236857
RADSeatle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ?
Спасибо пока сойдет такой селект
пока учусь
Спасибо всем
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли одним селектом вытащит c накопительным итогом Firebird 3 ? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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