Intereting Posts
Преобразование строки с различным форматом на сегодняшний день Поиск записей с 3 или более последовательными записями с одинаковым значением Агрегация строк в ORACLE 10g с тремя столбцами Проблема обновления параллелизма sqlalchemy Создать заявление на вывод из внешних отношений в SQL 2008? SQL Server дает пользователям (пользователям) доступ к базе данных db_owner Продолжающиеся вставки в Oracle при возникновении исключения Требуется кол-во запросов Проблема с регулярным выражением Validator для текстового поля в ASP.NET Запрос на две базы данных имеет ошибку из-за несоответствия сортировки Получить первые n записей для каждой группы сгруппированных результатов Что это означает, если выбрать 1 из таблицы? экспорт SQL с диаграммы Viso Сравнение строк в таблице оракула и сопоставление обновлений Сравнить 3 последовательных строки в таблице

Перенос результатов выбора с помощью Oracle

мой вопрос, с некоторым фоном:

Мне нужно сгенерировать некоторые sql-запросы на основе метаданных таблицы (формат столбца), и результат будет примерно таким:

TABLENAME1|COL1 TABLENAME1|COL2 TABLENAME2|COL1 TABLENAME2|COL2 TABLENAME2|COL3 TABLENAME3|COL1 TABLENAME4|COL1 TABLENAME4|COL2 ... /*some other 1800 rows */ 

(Да, это приказано.) Мне нужно переставить эти данные на основе первого столбца, чтобы ожидаемый результат был следующим:

 TABLENAME1|COL1|COL2|NULL TABLENAME2|COL1|COL2|COL3 TABLENAME3|COL1|NULL|NULL TABLENAME4|COL1|COL2|NULL /* less then 1800 rows ;-) */ 

Возможно ли использование Oracle SQL?

Заранее спасибо!

Если вы хотите сгенерировать запрос для каждого вызова или использовать hardcoded max-column-count, вы можете сделать что-то вроде этого:

 WITH tab AS ( SELECT table_name, column_name FROM user_tab_cols WHERE column_id <= 4 ) -- user_tab_cols used to provide test data, use your table instead SELECT MAX(c1) c1, MAX(c2) c2, MAX(c3) c3, MAX(c4) c4 FROM (SELECT table_name, DECODE( column_id, 1, column_name ) c1, DECODE( column_id, 2, column_name ) c2, DECODE( column_id, 3, column_name ) c3, DECODE( column_id, 4, column_name ) c4 FROM ( SELECT table_name, column_name, ROW_NUMBER() OVER ( PARTITION BY table_name ORDER BY column_name ) column_id FROM tab ) ) GROUP BY table_name ORDER BY table_name 

Если этого достаточно, чтобы получить его в этой форме

 TABLENAME1|COL1,COL2 TABLENAME2|COL1,COL2,COL3 

взгляните на stragg Тома Ките.

Ключевое слово, которое вы ищете, является pivot . Вот пример его использования. Синтаксис, как правило, такой же, как MSSQL, и поскольку я не знаю URL-адреса для документации Oracle, я подниму ссылку MSDN и надеюсь, что кто-то, кто знает больше о макете страницы Oracle, чем я, отредактирует его, указывая на свою документацию ,

РЕДАКТИРОВАТЬ: документация Oracle , поиск по оси вращения достаточно времени, и вы узнаете подробности.