Как делать выборку из 3х таблиц и поместить в отчёт EXCEL?
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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   |
|
Полезность: Нет оценки
|
А я пользуюсь
В ней хоть можно как то отформатировать значение.
Что все пользуются
, она круче чтоли? |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Ср Фев 29, 2012 09:34   |
|
Полезность: Нет оценки
|
yaffil пишет: | А я пользуюсь
В ней хоть можно как то отформатировать значение.
Что все пользуются
, она круче чтоли? |
на больших объемах она быстрее работает, но при этом не обновляет ячейку и динамические формулы не всегда работают, если применяется PUT. Без PRINT_ARRAY не используется _________________ всегда есть как минимум 2 выхода |
|
 |
Random Эксперт
Вступление в Клуб: 27.06.2011
|
Ср Фев 29, 2012 10:27   |
|
Полезность: Нет оценки
|
yaffil пишет: | А я пользуюсь
В ней хоть можно как то отформатировать значение.
Что все пользуются
, она круче чтоли? |
Я тоже пользуюсь excel.write в основном.
Volod пишет: | Кстати, оператор [excel].Print_Array; достаточно 1 раз на лист. |
Пардон, просто скопировал код три раза. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|