2016-02-04 1 views
0

Я хотел бы знать, нашел ли кто-нибудь метод, в котором вы можете получить средний или все столбцы в таблице. Я в настоящее время есть таблица с 900 колоннами, и было бы сделать это очень утомительно для ввода запроса сДля каждого оракула столбца SQL

SELECT AVG(t.columnA), AVG(t.columnB), etc... 

Есть, возможно, еще один способ пойти об этом. Предполагая, что они все NUMBER.

+0

Посмотрите имена столбцов в 'all_tab_cols' и постройте логику запроса как запрос или используя электронную таблицу. –

+0

900 колонн !!! Создайте представление, которое делает UNION ALL для каждого столбца. (Великий, чтобы иметь.) Затем выполните группу. – jarlh

+0

Если вы можете сгенерировать оператор select, просто найдите и замените все ',' на '), AVG ('. Тогда вам нужно добавить первое '' AVG ('и') 'перед словом' from'. Мое предложение состоит в том, чтобы используйте Notepad ++, если ваш инструмент запросов не поддерживает функцию find/replace all. – vtuhtan

ответ

2

Вот ваше решение, основанное на идее Гордона:

select 'SELECT AVG(' ||all_columns||') FROM YourTable' from (
    SELECT LISTAGG(column_name,',') within group (order by column_name) as all_Columns 
    FROM all_tab_columns 
    WHERE table_name = 'YourTable') 

Заменить YourTable с именем таблицы, это будет генерировать выходной сигнал, который вы должны скопировать и запустить.

Он генерирует все имена колонок с разделенной ими запятой и сосредоточен в выбранном запросе.

+1

[AVG] (http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions018.htm) не принимает несколько аргументов , с более чем одним столбцом сгенерированный SQL получит ORA-00909. Но этот подход будет работать вместо 'LISTAGG (column_name, '), AVG (')'. –

Смежные вопросы