CftClub.ru
Клуб специалистов ЦФТ-Банк

Как делать выборку из 3х таблиц и поместить в отчёт EXCEL?

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
arkazar
Участник со стажем


Вступление в Клуб: 27.09.2010
СообщениеВт Фев 28, 2012 14:24   Как делать выборку из 3х таблиц и поместить в отчёт EXCEL? Ответить с цитатой
Полезность: Нет оценки
У меня вопрос, по программированию. Стоит задача, чтобы сформировать отчёт в Excel с выборкой значений из:

- Кредитов
- Гарантий
- Аккредитоивов

Могли бы подсказать, как делать выборку сразу из 3 таблиц и поместить в одну?

Просьба пример какой-нибудь кинуть....
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеВт Фев 28, 2012 14:32    Ответить с цитатой
Полезность: Нет оценки
Через операцию с типом "Групповая".
В ней через select в loop собираеш всё и выплёвываеш в Эксель через [EXCEL].Write
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Фев 28, 2012 14:37   Re: Как делать выборку из 3х таблиц и поместить в отчёт EXCE Ответить с цитатой
Полезность: Нет оценки
arkazar пишет:
У меня вопрос, по программированию. Стоит задача, чтобы сформировать отчёт в Excel с выборкой значений из:

- Кредитов
- Гарантий
- Аккредитоивов

Могли бы подсказать, как делать выборку сразу из 3 таблиц и поместить в одну?

Просьба пример какой-нибудь кинуть....


а подробности какие-нибудь можно?

а то приходит на ум только выборка через union по некоторым полям.


типа
Код:

     
      for (
        select x(x.sum   :sum
             ,x.id     :id)
         in (
      
          select g(g.[SUMMA_DOG]       :sum
                  ,g                   :id)
           in ::[GUARANTIES]
           union
           select c(c.[SUMMA_DOG]      :sum
                   ,c                  :id)
            in ::[PR_CRED] all
            union
            select a(a.[SUMMA]         :sum
                    ,a                 :id)
             in ::[ACCREDIT]
            )
        )
loop
   i := nvl(i, 0) + 1;
   j := 1;
   [excel].put(i,j, x.id);
   [excel].put(i,j+1, x.sum);
end loop;
[excel].Print_Array;

_________________
всегда есть как минимум 2 выхода
arkazar
Участник со стажем


Вступление в Клуб: 27.09.2010
СообщениеВт Фев 28, 2012 14:47    Ответить с цитатой
Полезность: Нет оценки
Цитата:
а подробности какие-нибудь можно?

а то приходит на ум только выборка через union по некоторым полям.


типа
Код:
for (
select x(x.sum :sum
,x.id :id)
in (

select g(g.[SUMMA_DOG] :sum
,g :id)
in ::[GUARANTIES]
union
select c(c.[SUMMA_DOG] :sum
,c :id)
in ::[PR_CRED] all
union
select a(a.[SUMMA] :sum
,a :id)
in ::[ACCREDIT]
)
)
loop
[excel].put(1,1, x.id);
[excel].put(1,2, x.sum);
[excel].Print_Array;
end loop;



А какие подробности? о чём. Надо выборку из кредитов делать из аккредитивов и гарантий и всё это запихнуть в одну таблицу, чтобы потом excel.put(...); в один отчёт засунуть. Ну перед этим в таблице всё упорядочить.

А он не перепутает таким способ что куда, где гарантии, а где кредиты и т.д.?))
Я просто первый раз такой приём вижу...
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеВт Фев 28, 2012 14:52    Ответить с цитатой
Полезность: Нет оценки
arkazar пишет:
А он не перепутает таким способ что куда, где гарантии, а где кредиты и т.д.?))
Я просто первый раз такой приём вижу...


это просто пример...
Вам же ни кто не мешает вытянуть еще и класс записи и там уже сортировки применять. Все зависит от набора полей.. Вполне возможно, что такой подход не подойдет и придется как-то по другому делать. Такой вариант подходит, если данные однотипны..
_________________
всегда есть как минимум 2 выхода


Последний раз редактировалось: Alexsey (Вт Фев 28, 2012 14:54), всего редактировалось 1 раз
arkazar
Участник со стажем


Вступление в Клуб: 27.09.2010
СообщениеВт Фев 28, 2012 14:53    Ответить с цитатой
Полезность: Нет оценки
Ок. ясно.
Спасибо. Данные однотипные должны быть, по моей предварительной оценке.
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Фев 29, 2012 05:43    Ответить с цитатой
Полезность: Нет оценки
arkazar пишет:
Ок. ясно.
Спасибо. Данные однотипные должны быть, по моей предварительной оценке.


Данные не обязательно должны быть однотипные.

Код:

for (select g(   g.[SUMMA_DOG] :sum
      ,   g :id)
   in ::[GUARANTIES]
) loop
   [excel].put(1,1, x.id);
   [excel].put(1,2, x.sum);
   [excel].Print_Array;
end loop;

for (select c(   c.[SUMMA_DOG] :sum
      ,   c :id
      ,   c.[FILIAL].[code] :br
   ) in ::[PR_CRED] all
) loop
   [excel].put(1,1, x.id);
   [excel].put(1,2, x.sum);
   [excel].put(1,3, x.br);
   [excel].Print_Array;
end loop;

for (select a(   a.[SUMMA] :sum
      ,   a :id
   ) in ::[ACCREDIT]
) loop
   [excel].put(1,1, x.id);
   [excel].put(1,2, x.sum);
   [excel].Print_Array;
end loop;
[/code]
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Фев 29, 2012 08:23    Ответить с цитатой
Полезность: 1
Кстати, оператор [excel].Print_Array; достаточно 1 раз на лист.
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеСр Фев 29, 2012 09:27    Ответить с цитатой
Полезность: Нет оценки
А я пользуюсь
Код:

[EXCEL].Write

В ней хоть можно как то отформатировать значение.

Что все пользуются
Код:

[excel].put

, она круче чтоли?
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеСр Фев 29, 2012 09:34    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
А я пользуюсь
Код:

[EXCEL].Write

В ней хоть можно как то отформатировать значение.

Что все пользуются
Код:

[excel].put

, она круче чтоли?


на больших объемах она быстрее работает, но при этом не обновляет ячейку и динамические формулы не всегда работают, если применяется PUT. Без PRINT_ARRAY не используется
_________________
всегда есть как минимум 2 выхода
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Фев 29, 2012 10:27    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
А я пользуюсь
Код:
[EXCEL].Write


В ней хоть можно как то отформатировать значение.

Что все пользуются
Код:
[excel].put


, она круче чтоли?


Я тоже пользуюсь excel.write в основном.

Volod пишет:
Кстати, оператор [excel].Print_Array; достаточно 1 раз на лист.


Пардон, просто скопировал код три раза.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru