Превратите несколько (M) рядов (N) столбцов в одну строку с (M * N) столбцами в Oracle - PullRequest
1 голос
/ 10 марта 2011

У меня было много проблем с поиском примеров или информации по этому вопросу. Я посмотрел на PIVOT, но примеры, которые я нашел, немного смутили меня относительно того, что на самом деле происходит. Я также не собираюсь суммировать или группировать данные.

По сути, у меня есть запрос, который возвращает 2 строки по 4 столбца

A B C D
--------
1 2 4 8
2 4 8 0

И я хочу, чтобы это выглядело как

A B C D A2 B2 C2 D2
-------------------
1 2 3 4  2  4  8  0

Это то, что я могу сделать без PL / SQL?

РЕДАКТИРОВАТЬ: Если есть способ сделать это для фиксированного числа строк и столбцов - я все равно приветствую ответ на этот подход. В идеале, это также будет работать на SQL Server, но я был бы счастлив с конкретным решением Oracle.

Ответы [ 3 ]

2 голосов
/ 19 сентября 2012

Поскольку вы упомянули, что даже решение с фиксированным числом строк и столбцов в порядке, вы можете попробовать это ...

SELECT MIN(DECODE(rownum, 1, A, null)) A,
       MIN(DECODE(rownum, 1, B, null)) B,
       MIN(DECODE(rownum, 1, C, null)) C,
       MIN(DECODE(rownum, 1, D, null)) D,
       MIN(DECODE(rownum, 2, A, null)) A2,
       MIN(DECODE(rownum, 2, B, null)) B2,
       MIN(DECODE(rownum, 2, C, null)) C2,
       MIN(DECODE(rownum, 2, D, null)) D2
FROM <test_table>
2 голосов
/ 10 марта 2011

Я никогда не видел механизма, позволяющего варьировать количество столбцов в наборе результатов в зависимости от количества возвращаемых строк.Возможно, вы сможете динамически сгенерировать запрос на основе результирующего набора, а затем выполнить запрос.

Таблицы PIVOT больше о переключении координат X и Y.Я не думаю, что это то, что вы ищете.

Учитывая, что у вас есть фиксированный максимум, вы всегда можете вернуть 6 * N столбцов и использовать декодирование на rownum для выбора данных в соответствующие столбцы.

1 голос
/ 10 марта 2011

Оператор выбора всегда должен иметь фиксированное количество столбцов, определяемых во время разбора.То, что вы спрашиваете, - это возможность определять столбцы во время выборки.

Не может быть сделано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...