Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объединение 3 запросов в процедуре / 4 сообщений из 4, страница 1 из 1
08.04.2014, 10:51:08
    #38608067
SDKpuca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение 3 запросов в процедуре
В общем суть в следующем, имеется 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
08.04.2014, 11:30:42
    #38608156
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение 3 запросов в процедуре
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
08.04.2014, 11:40:04
    #38608192
SDKpuca
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение 3 запросов в процедуре
m7m, большое спасибо, то что нужно!)
...
Рейтинг: 0 / 0
08.04.2014, 12:25:14
    #38608270
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение 3 запросов в процедуре
first - это не функция, для сведения.
first(1) идентично first 1
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объединение 3 запросов в процедуре / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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