powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение столбцов неизвестного числа таблиц
35 сообщений из 35, показаны все 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
Объединение столбцов неизвестного числа таблиц
    #39674435
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ярослав БатозскийElicДурёха, ты сама насколько веришь в это требование деспота-начальника?

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


Не взлетит.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674436
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Объединение столбцов неизвестного числа таблиц
    #39674439
L_Kira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,

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

andrey_anonymousНе взлетит.
Уточни плиз почему
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674476
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_Kira, но как получить результат этого select, чтобы работать с ним?

- dbms_output
- материализация
- забить
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674503
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183 http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables
http://sqlhints.com/tag/dynamic-pivot-column-names/

А ты уверен что ты форумы не попутал? Ссылочка то на SQL Server если ты не заметил.

SY.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674520
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ярослав Батозскийandrey_anonymous,

andrey_anonymousНе взлетит.
Уточни плиз почему

По той простой причине что OdciTableDescribe где и определяется чиcло и типы возвращаемых выражений вызывается на этапе hard parse. Soft parse (последующие выполнения) находит уже распарсенный SQL и посему вернет то же чиcло и типы выражений как и первое выполнение и мы не получим искомый результат если были изменения. Так-что придется делать что-то типа:

Код: plsql
1.
2.
create sequence force_hard_parse 
/



И при вызове:

Код: plsql
1.
2.
3.
4.
5.
column force_hard_parse new_value force_hard_parse noprint
select  force_hard_parse.nextval force_hard_parse
  from  dual
/
select * from table (MY_MANAGER_REQ_1_FUNCTION(&force_hard_parse))



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

Т.е. типичный отчет (report) и типичная задача для генератора отчетов. Так-что не забирай гвозди микроскопом и используй нужный инструмент - генератор отчетов.

SY.
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674527
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYL_Kiraчерез обработчик выводить на экран

Т.е. типичный отчет (report) и типичная задача для генератора отчетов. Так-что не забирай гвозди микроскопом и используй нужный инструмент - генератор отчетов.

SY.зато задача какая интересная - переменное количество полей в отчете
...
Рейтинг: 0 / 0
Объединение столбцов неизвестного числа таблиц
    #39674613
Ярослав Батозский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYПо той простой причине что OdciTableDescribe где и определяется чиcло и типы возвращаемых выражений вызывается на этапе hard parse. Soft parse (последующие выполнения) находит уже распарсенный SQL
Cпасибо
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение столбцов неизвестного числа таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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