powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объединение 3 запросов в процедуре
4 сообщений из 4, страница 1 из 1
Объединение 3 запросов в процедуре
    #38608067
SDKpuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем суть в следующем, имеется 3 запроса....нужно объединить их в процедуру с 1 входным параметром...
1) запрос
Код: sql
1.
select first(1) cdDocum from documref where cdsigndocum = 205 and DocDate =:DocDate



:DocDate -как раз единственный входной параметр, с помощью него мы получаем cdDocum - который используется в других 2-ух запросах...


2)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
  debet,
  sum(summa) as summa
from
economydocum e
where
  e.cdDocum = cdDocum
  and debet like '10/%'
group by
  debet
 



3)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
  credit,
  sum(summa) as summa
from
economydocum e
where
  e.cdDocum = cdDocum
  and e.credit like '10/%'
group by
  credit



Получилась следующая процедура...
Код: 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.
create procedure statement_Of_11 (
    DocDate date)
returns (
debet varchar(10),
summaDebet double precision,
credit varchar(10),
summaCredit double precision)
as
declare variable cdDocum integer;
begin

    select first(1) cdDocum from documref where cdsigndocum = 205 and DocDate = :DocDate
    into :cdDocum;


    summaDebet=0.00;
    for
    select sum(summa), debet
    from economydocum e
    where
      e.cdDocum = :cdDocum
      and debet like '10/%'
    group by
      debet
      Into :summaDebet, :debet
   do
          suspend;

    summaCredit=0.00;
    for
    select  sum(summa), credit
    from economydocum e
    where
      e.cdDocum = :cdDocum
      and credit like '10/%'
    group by
      credit
      Into :summacredit, :credit
   do
          suspend;

  suspend;
end



результат работы 2 запроса

DEBET | SUMMA 10/1 || 38848278.800 10/11 || 92773.644 10/2 || 7996605.990 10/3 || 4142.020 10/6 || 222500.730
результат работы 3 запроса

CREDIT | SUMMA 10/11 || 22.601 10/3 || 4142.020 10/6 || 252933.730
результат работы "процедуры" запроса

DEBET | SUMMADEBET | CREDIT | SUMMACREDIT 10/1 || 38 848 278.800 10/11 || 92 773.644 10/2 || 7 996 605.990 10/3 || 4 142.020 10/6 || 222 500.730 10/6 || 222 500.730 ||||||| 10/11 || 22.601 10/6 || 222 500.730 ||||||| 10/3 || 4 142.020 10/6 || 222 500.730 ||||||| 10/6 || 252 933.730 10/6 || 222 500.730 ||||||| 10/6 || 252 933.730


Как избавиться от нулевых значений и дубликатов?
и как добавить такое.....
Если имеется CREDIT к примеру "10/6" и соответственно DEBET "10/6".... то из суммы DEBET'a отнимаем сумма CREDIT'a

тут к примеру выходит так что debit 10/6 = 222 500.730, а credit 10/6 = 252 933.730
Как к примеру в переменную SUMMA, записать разность этих сумм? то есть
summa = 222 500.730- 252 933.730
помогите ребят....если это никак, то сделаю на стороне клиента.....помогите процедуру до ума довести...
...
Рейтинг: 0 / 0
Объединение 3 запросов в процедуре
    #38608156
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDKpuca
Если я правильно понял, то в первом приближении
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select bl, sum(summa)
from (
  select  debet as bl,  sum(summa) as summa
    from economydocum e
    where   e.cdDocum = (select first(1) cdDocum from documref where cdsigndocum = 205 and DocDate =:DocDate)
       and debet like '10/%'
    group by  debet
  union all
    select credit as bl, -sum(summa) as summa
      from economydocum e
      where   e.cdDocum = (select first(1) cdDocum from documref where cdsigndocum = 205 and DocDate =:DocDate)
       and e.credit like '10/%'
    group by  credit
)
group by bl


зы. дальше оптимизируй уже сам
...
Рейтинг: 0 / 0
Объединение 3 запросов в процедуре
    #38608192
SDKpuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m, большое спасибо, то что нужно!)
...
Рейтинг: 0 / 0
Объединение 3 запросов в процедуре
    #38608270
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
first - это не функция, для сведения.
first(1) идентично first 1
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объединение 3 запросов в процедуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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