2016-11-28 2 views
-3

Привет, мне нужно выполнить все строки из таблицы. У меня есть этот запрос select * from table1; Эта таблица содержит 400 полей Я не могу это сделать select column1 ||','||column2||','||.....from table1 может кто-то помочь e исправить это, используя select * from table1 для конкатенации всех строк. И спасибо.concat все строки в одном ряду

+0

просим пометить ваши dbms. –

+1

это похоже на оракул? и кажется, что вы не конкретизируете строки ... похоже, вы хотите объединить столбцы, чтобы вернуть 1 столбец со многими строками? если это не так, отправьте образцы данных и ожидаемые результаты. – xQbert

+0

, если вы используете db2 или oracle, посмотрите на функцию LISTAGG(). – Hogan

ответ

-1

В Oracle (и аналогичные в других СУБД) можно использовать системные таблицы .... и сделать это в два этапа:

Предполагая, что вы хотите, чтобы объединить все столбцы в 1 столбце для X строк ...

ШАГ 1:

SELECT LISTAGG(column_Name, '|| Chr(44)||') --this char(44) adds a comma 
      within group (order by column_ID) as Fields 
      --Order by column_Id ensures they are in the same order as defined in db. 
FROM all_tab_Cols 
WHERE table_name = 'YOURTABLE' 
    and owner = 'YOUROWNER' 
--Perhaps exclude system columns 
    and Virtual_Column = 'NO' 

ШАГ 2:

Скопировать результаты в новый оператор SQL и выполнить. Потенциальный выглядеть как Field1|| Chr(44)||Field2|| Chr(44)||Field3

SELECT <results> 
FROM YOURTABLE; 

, который приведет запятыми список значений в 1 столбце для всех строк YOURTABLE

Если длина всех столбцов (наряду с, пространством и | |) будет превышать 4000 символов разрешено ... мы можем использовать тип CLOB данных вместо того, чтобы за счет использования объектов XML ...

* Заменить шаг 1 с *

SELECT RTRIM(XMLAGG(XMLELEMENT(Column_ID,Column_Name,'|| Chr(44)||').extract('//text()') order by Column_ID).GetClobVal(),'|| Chr(44)||') fields 
FROM all_tab_Cols 
WHERE table_name = 'YOURTABLENAME' 
    and owner = 'YOUROWNER' 
--Perhaps exclude system columns 
    and Virtual_Column = 'NO'; 

Синтаксис для вышеуказанного присваивается This Oracle thread, но обновлен для ваших нужд.

+0

проблема, у меня есть 400 столбцов, что-то вроде этого SELECT LISTAGG (*, '||, ||')? – razzek

+0

Вы попробовали? Шаг 1 выбирает ВСЕ не виртуальные столбцы из указанной таблицы. шаг 2, затем выбирает все 400 столбцов и объединяет их. Все, что вам нужно сделать, это изменить YOURTABLE и YOUROWNER на схему и таблицу, запустив ее, возьмите результаты и вставьте в 2-й запрос на шаге 2, заменив на то, что вы скопировали. Не вводить вручную все 400 столбцов. – xQbert

+0

или вы получаете строку concat слишком длинную ошибку? 'ORA-01489: результат конкатенации строки слишком длинный 01489. 00000 -« результат конкатенации строки слишком длинный » * Причина: результат конкатенации строк больше максимального. * Действие: убедитесь, что результат меньше максимального. ' – xQbert

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