powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение столбцов неизвестного числа таблиц
25 сообщений из 35, страница 1 из 2
Объединение столбцов неизвестного числа таблиц
    #39674236
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте

Есть не известное заранее число таблиц (например, новая появляется каждый месяц) одинаковой структуры – состоят из 2 столбцов; в первом имена сотрудников, во втором значения. Количество имен сотрудников и их значения не одинаковы в разных таблицах – одно имя может быть во всех таблицах, только в части, только в одной, например.

Нужно получить единую таблицу, в которой первый столбец содержит список всех имен сотрудников, встречающихся в исходных таблицах хотя бы раз. Остальных столбцов должно быть столько, сколько исходных таблиц, в них на пересечении с именем должны быть данные, если имя есть в этом месяце, и пусто, если данных в месяце нет.

Запрос, возвращающий результирующую таблицу, должен быть автоматическим, т.е. не требовать доработки при появлении новой таблицы.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674240
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_KiraЗапрос, возвращающий результирующую таблицу, должен быть автоматическим, т.е. не требовать доработки при появлении новой таблицы.Дурёха, ты сама насколько веришь в это требование деспота-начальника?
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674258
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для этого есть эксель
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674267
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Девочка зарегалась в sql.ru в надежде получить консалтинг. И получила реплику "Дурёха".

Подбили на взлёте.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674281
Ярослав Батозский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicДурёха, ты сама насколько веришь в это требование деспота-начальника?

Главное верить в себя)
Вот запрос, полностью удовлетворяющий условиям задачи
Код: plsql
1.
select * from table (MY_MANAGER_REQ_1_FUNCTION)


Армия есть армия

L_KiraЗапрос, возвращающий результирующую таблицу, должен быть автоматическим, т.е. не требовать доработки при появлении новой таблицы.

Здесь MY_MANAGER_REQ_1_FUNCTION это функция, возвращающая коллекцию или трубопроводная
В функции нужно прочитать USER_TABLES или может другую таблицу словаря, составить список существующих таблиц по твоей маске, построить динамический SQL, выполнить и выфетчить его.

Но тут возникает проблема, что мы заранее не знаем сколько будет колонок и не ясно что возвращать.
Я вижу здесь два пути: 1) зарезервировать колонки, ну допустим сотню, если таблиц меньше, хвостовые колонки будут пусты, если таблиц стало больше 100 -- придётся доработать функцию, добавить колонок
2) Написать функцию, которая будет возвращать произвольное количество колонок. Искать здесь на форуме по слову ODCITableDescribe

Вобщем, сделать можно, но это будет уж крайне нерационально
Кроме того, не факт что твоё приложение сможет забрать данные с произвольным количеством колонок

Это всё в том случае, если мы не можем поменять постановку задачи

Если можем -- тогда лучше вместо кучи таблиц создать одну партиционированную. Ну можем добавить колонку, которая будет эмулировать имя одной таблицы из твоей кучи
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674298
Alexander_Ttl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_KiraЕсть не известное заранее число таблиц (например, новая появляется каждый месяц) одинаковой структуры – состоят из 2 столбцов; в первом имена сотрудников, во втором значения. Количество имен сотрудников и их значения не одинаковы в разных таблицах . . .Я чет не пойму, это пример из учебника, или бизнесовый? И в том и в другом случае, хранить так данные - это просто абсурд. В первой таблице - имя и фамилия, во второй - имя и отчество, в третьей - имя и дата рождения и т.д.
Архитектора БД в студию!
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674304
shurka22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_Kira,
Я бы сделал так (решение "в лоб"):
1) регулярно запускается джоб (триггер?), который смотрит, а не появилась ли новая таблица?
2) как только появилась новая таблица, он через dynamic sql (execute immediate) создаёт новую view вида: select Name, col1, col2, col3 .... colN from итд..
3) Запрос - всегда будет select * from view_name;
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674307
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander_Ttl,

Да не, скорее всего передается информация о табеле РМ или о выработке.
Другое дело, что "имена" это явный моветон. Явно нужен табельный номер.

Хотя о структуре данных несомненно надо задуматься и завести поле с идентификатором периода/(номера выгрузки)
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674333
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если новые данные будут дописываться в одну таблицу с 3 столбцами - период, имя и данные, где столбец данные нужно разбить на несколько столбцов по значению периода - это как-то облегчит задачу?

Или можно использовать что-то типа динамического sql - в цикле сформировать строку с запросом, объединив таблицы join, а затем выполнить ее?
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674334
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_KiraЕсли новые данные будут дописываться в одну таблицу с 3 столбцами - период, имя и данные, где столбец данные нужно разбить на несколько столбцов по значению периода - это как-то облегчит задачу?

Или можно использовать что-то типа динамического sql - в цикле сформировать строку с запросом, объединив таблицы join, а затем выполнить ее?ты решаешь маленькую локальную задачу
не показывая нам, нафига всё это

в результате все советуют какую-то хрень
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674336
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нужно получить таблицы вида для каждого отдела, т.е. изменение val по датам

| Дата1 | Дата2 | Дата3 | .....
------------------------------------------------
Имя1 | val | val | val |
------------------------------------------------
Имя2 | val | | |
------------------------------------------------
Имя3 | val | val | val |
------------------------------------------------
Имя4 | | | val |
------------------------------------------------
Имя5 | val | | val |
------------------------------------------------
...................

где имена - это набор уникальных имен за все даты
даты - набор столбцов, число которых не известно, для разных отделов может быть разное
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674337
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_KiraЕсли новые данные будут дописываться в одну таблицу с 3 столбцами - период, имя и данные, где столбец данные нужно разбить на несколько столбцов по значению периода - это как-то облегчит задачу?


Табельный номер
Дата выгрузки
Номер/признак документа
Сумма.

Сильно облегчит.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674342
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_Kiraнужно получить таблицы вида для каждого отдела, т.е. изменение val по датам

А это простенький PIVOT отчет.
Но для этого не надо хранить информацию в данной форме.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674343
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас две задачи
1. Собрать и хранить информацию
2. Вывести отчет.

Не надо их путать.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674348
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно пример, как, например, из данных вида

1 | name1 | 10
1 | name2 | 11
1 | name3 | 12
2 | name1 | 20
2 | name4 | 21
....................

получить
...........| 1 | 2 |
--------------------------------
name1 | 10 | 20 |
name2 | 11 | |
name3 | 12 | |
name4 | | 21 |
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674363
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674368
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_Kiraможно пример, как, например, из данных вида

1 | name1 | 10
1 | name2 | 11
1 | name3 | 12
2 | name1 | 20
2 | name4 | 21
....................

получить
...........| 1 | 2 |
--------------------------------
name1 | 10 | 20 |
name2 | 11 | |
name3 | 12 | |
name4 | | 21 |для чего?
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674371
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,
статистика изменения val у каждого name со временем
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674372
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,
как использовать pivot, если количество столбцов не известно?
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674379
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674382
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_Kiraкак использовать pivot, если количество столбцов не известно?правильный вопрос - как использовать таблицы, которые неизвестны.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674386
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как построить вечный двигатель,
Как реализовать динамический PIVOT на Oracle
Как сделать мир во всём мире.
Много еще глобальных задач стоит перед человечеством.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674387
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674391
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-L_Kiraкак использовать pivot, если количество столбцов не известно?правильный вопрос - как использовать таблицы, которые неизвестны.

наверно както так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
from (select col1, col2, col3 
           from table1
         union all
      select col1, col2, col3 
           from table2
         union all
      select col1, col2, col3 
           from table3

...................
) table 
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674423
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запуск этой конструкции

declare
sqlqry clob;
cols clob;
begin
select listagg('''' || per || ''' as "' || per || '"', ',') within group (order by per)
into cols
from (select distinct per from table);
sqlqry :=
'
select *
from table
pivot
(
MIN(val) for per in (' || cols || ')
)';
execute immediate sqlqry;
end;


выдает anonymous block completed

но как получить результат этого select, чтобы работать с ним?
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение столбцов неизвестного числа таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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