|
|
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
Здравствуйте Есть не известное заранее число таблиц (например, новая появляется каждый месяц) одинаковой структуры – состоят из 2 столбцов; в первом имена сотрудников, во втором значения. Количество имен сотрудников и их значения не одинаковы в разных таблицах – одно имя может быть во всех таблицах, только в части, только в одной, например. Нужно получить единую таблицу, в которой первый столбец содержит список всех имен сотрудников, встречающихся в исходных таблицах хотя бы раз. Остальных столбцов должно быть столько, сколько исходных таблиц, в них на пересечении с именем должны быть данные, если имя есть в этом месяце, и пусто, если данных в месяце нет. Запрос, возвращающий результирующую таблицу, должен быть автоматическим, т.е. не требовать доработки при появлении новой таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2018, 20:09 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
L_KiraЗапрос, возвращающий результирующую таблицу, должен быть автоматическим, т.е. не требовать доработки при появлении новой таблицы.Дурёха, ты сама насколько веришь в это требование деспота-начальника? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2018, 20:18 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
для этого есть эксель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2018, 22:36 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
Девочка зарегалась в sql.ru в надежде получить консалтинг. И получила реплику "Дурёха". Подбили на взлёте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2018, 23:21 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
ElicДурёха, ты сама насколько веришь в это требование деспота-начальника? Главное верить в себя) Вот запрос, полностью удовлетворяющий условиям задачи Код: plsql 1. Армия есть армия L_KiraЗапрос, возвращающий результирующую таблицу, должен быть автоматическим, т.е. не требовать доработки при появлении новой таблицы. Здесь MY_MANAGER_REQ_1_FUNCTION это функция, возвращающая коллекцию или трубопроводная В функции нужно прочитать USER_TABLES или может другую таблицу словаря, составить список существующих таблиц по твоей маске, построить динамический SQL, выполнить и выфетчить его. Но тут возникает проблема, что мы заранее не знаем сколько будет колонок и не ясно что возвращать. Я вижу здесь два пути: 1) зарезервировать колонки, ну допустим сотню, если таблиц меньше, хвостовые колонки будут пусты, если таблиц стало больше 100 -- придётся доработать функцию, добавить колонок 2) Написать функцию, которая будет возвращать произвольное количество колонок. Искать здесь на форуме по слову ODCITableDescribe Вобщем, сделать можно, но это будет уж крайне нерационально Кроме того, не факт что твоё приложение сможет забрать данные с произвольным количеством колонок Это всё в том случае, если мы не можем поменять постановку задачи Если можем -- тогда лучше вместо кучи таблиц создать одну партиционированную. Ну можем добавить колонку, которая будет эмулировать имя одной таблицы из твоей кучи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 00:53 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
L_KiraЕсть не известное заранее число таблиц (например, новая появляется каждый месяц) одинаковой структуры – состоят из 2 столбцов; в первом имена сотрудников, во втором значения. Количество имен сотрудников и их значения не одинаковы в разных таблицах . . .Я чет не пойму, это пример из учебника, или бизнесовый? И в том и в другом случае, хранить так данные - это просто абсурд. В первой таблице - имя и фамилия, во второй - имя и отчество, в третьей - имя и дата рождения и т.д. Архитектора БД в студию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 05:03 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
L_Kira, Я бы сделал так (решение "в лоб"): 1) регулярно запускается джоб (триггер?), который смотрит, а не появилась ли новая таблица? 2) как только появилась новая таблица, он через dynamic sql (execute immediate) создаёт новую view вида: select Name, col1, col2, col3 .... colN from итд.. 3) Запрос - всегда будет select * from view_name; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 05:53 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
Alexander_Ttl, Да не, скорее всего передается информация о табеле РМ или о выработке. Другое дело, что "имена" это явный моветон. Явно нужен табельный номер. Хотя о структуре данных несомненно надо задуматься и завести поле с идентификатором периода/(номера выгрузки) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 05:55 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
Если новые данные будут дописываться в одну таблицу с 3 столбцами - период, имя и данные, где столбец данные нужно разбить на несколько столбцов по значению периода - это как-то облегчит задачу? Или можно использовать что-то типа динамического sql - в цикле сформировать строку с запросом, объединив таблицы join, а затем выполнить ее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 08:50 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
L_KiraЕсли новые данные будут дописываться в одну таблицу с 3 столбцами - период, имя и данные, где столбец данные нужно разбить на несколько столбцов по значению периода - это как-то облегчит задачу? Или можно использовать что-то типа динамического sql - в цикле сформировать строку с запросом, объединив таблицы join, а затем выполнить ее?ты решаешь маленькую локальную задачу не показывая нам, нафига всё это в результате все советуют какую-то хрень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:02 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
нужно получить таблицы вида для каждого отдела, т.е. изменение val по датам | Дата1 | Дата2 | Дата3 | ..... ------------------------------------------------ Имя1 | val | val | val | ------------------------------------------------ Имя2 | val | | | ------------------------------------------------ Имя3 | val | val | val | ------------------------------------------------ Имя4 | | | val | ------------------------------------------------ Имя5 | val | | val | ------------------------------------------------ ................... где имена - это набор уникальных имен за все даты даты - набор столбцов, число которых не известно, для разных отделов может быть разное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:10 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
L_KiraЕсли новые данные будут дописываться в одну таблицу с 3 столбцами - период, имя и данные, где столбец данные нужно разбить на несколько столбцов по значению периода - это как-то облегчит задачу? Табельный номер Дата выгрузки Номер/признак документа Сумма. Сильно облегчит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:11 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
L_Kiraнужно получить таблицы вида для каждого отдела, т.е. изменение val по датам А это простенький PIVOT отчет. Но для этого не надо хранить информацию в данной форме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:17 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
У вас две задачи 1. Собрать и хранить информацию 2. Вывести отчет. Не надо их путать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:19 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
можно пример, как, например, из данных вида 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 | ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:24 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
RTFM Pivoting Operations (FAQ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:36 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
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 |для чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:38 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
andreymx, статистика изменения val у каждого name со временем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:41 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
982183, как использовать pivot, если количество столбцов не известно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:42 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
http://www.sqlteam.com/article/dynamic-cross-tabs-pivot-tables http://sqlhints.com/tag/dynamic-pivot-column-names/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:54 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
L_Kiraкак использовать pivot, если количество столбцов не известно?правильный вопрос - как использовать таблицы, которые неизвестны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 09:58 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
Как построить вечный двигатель, Как реализовать динамический PIVOT на Oracle Как сделать мир во всём мире. Много еще глобальных задач стоит перед человечеством. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 10:05 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 10:06 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
-2-L_Kiraкак использовать pivot, если количество столбцов не известно?правильный вопрос - как использовать таблицы, которые неизвестны. наверно както так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 10:16 |
|
||
|
Объединение столбцов неизвестного числа таблиц
|
|||
|---|---|---|---|
|
#18+
запуск этой конструкции 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, чтобы работать с ним? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2018, 11:43 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39674336&tid=1883725]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
127ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 422ms |

| 0 / 0 |
