Как объединить два столбца результата в столбец с чередующимися результатами в oracle? - PullRequest
1 голос
/ 28 февраля 2020

Для таблицы со столбцами A и B выберите * из таблицы, чтобы вернуть

AB
A1 B1
A2 B2
A3 B3

Есть ли способ сделать запрос так, чтобы набор результатов был таким:

Объединено
A1
B1
A2
B2
A3
B3

Ценю любые предложения:)

Ответы [ 4 ]

2 голосов
/ 28 февраля 2020

Я бы написал так:

select merged
from ((select a as merged, a as ordcol, 1 as which from t
      ) union all
      (select b, a, 2 from t
      )
     ) t
order by ordcol, which;

Для этого оконные функции не нужны.

2 голосов
/ 28 февраля 2020

Будет работать союз с добавленной специей для определения порядка:

SELECT col
FROM (
  SELECT 'A' as colname, row_number() OVER (ORDER BY A) as colrow, A as col FROM table
  UNION ALL
  SELECT 'B' as colname, row_number() OVER (ORDER BY B) as colrow, B as col FROM table
) sub
ORDER BY colrow, colname
1 голос
/ 28 февраля 2020

Попробуйте это:

SELECT a, rownum*2 as r FROM table
UNION ALL
SELECT b, (rownum*2)+1 FROM table
ORDER BY r

Возможно, вам придется превратить их в подзапросы и упорядочить с помощью a / b - было не совсем понятно, были ли отсортированы данные вашего примера или вы просто рады иметь естественный порядок, пока они чередуются

1 голос
/ 28 февраля 2020

Простое левое соединение и случай, когда это будет сделано:

SELECT CASE WHEN T1.A = LEAD(T1.A) OVER (ORDER BY T1.A)  THEN T1.A
            ELSE T1.B
       END Merged
FROM MYTABLE T1
LEFT JOIN MYTABLE T2 ON T1.A <> T2.A;

Вот демоверсия

Результат :

enter image description here

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