оракул sql 2 столбца в одном столбце - PullRequest
0 голосов
/ 11 декабря 2018

Моя БД выглядит так:

+-----+-----+
|FN   |LN   |
+-----+-----+
|FN1  |LN1  |
|FN2  |LN2  |
|FN3  |LN3  |
+-----+-----+

Редактировать: Я пытался:

SELECT FN || ' - ' || LN Name FROM TBL;

Вывод:

+-----------+
|Name       |
+-----------+
|FN1 - LN1  |
|FN2 - LN2  |
|FN3 - LN3  |
+-----------+

Но я хочу присоединитьсяони находятся в том же столбце, но разделены новой строкой, например:

+-----+
|Name |
+-----+
|FN1  |
|LN1  |
|FN2  |    
|LN2  |
|FN3  |
|LN3  |
+-----+

Примечание: FN и LN находятся в одной строке

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вы можете использовать LISTAGG для объединения строк и CHR(10) для новых строк.

SELECT listagg(fn 
               ||chr(10) 
               ||ln, chr(10)) 
         within GROUP ( ORDER BY fn, ln) AS Name 
FROM   tbl;

Демо

0 голосов
/ 11 декабря 2018

Это поместит символ новой строки в вывод - это, пожалуй, все, что вы хотели под этим "Примечание: FN и LN находятся в одной строке"

select
     ( fn ||chr(10) || ln ) as name
from tbl

Если большестроки действительно необходимы, хотя перекрестное соединение может использоваться для формирования большего количества строк, а выражение case для выборочного вывода из исходных столбцов:

select
     case when n.n = 1 then tbl.fn else tbl.ln end as name
from tbl
cross join (select 1 n from dual union all select 2 from dual) n
0 голосов
/ 11 декабря 2018

Вы можете использовать union all:

select fn as name
from t
union all
select ln
from t;

Если вы заботитесь о заказе:

select name
from (select fn as name, rownum as seqnum, 1 as ord
      from t
      union all
      select ln, rownum as seqnum, 2 as ord
      from t
     ) t
order by seqnum, ord;

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

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