powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение столбцов
14 сообщений из 14, страница 1 из 1
Объединение столбцов
    #39355058
wlyaman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Не могу найти решение, как объединить три столбца, которые на картинке, в один так, чтобы значения шли в алфавитном порядке с разделителем запятой. В данном случае результат должен быть таким: De Haan, King, Kochhar.
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355073
veep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wlyamanВсем привет! Не могу найти решение, как объединить три столбца, которые на картинке, в один так, чтобы значения шли в алфавитном порядке с разделителем запятой. В данном случае результат должен быть таким: De Haan, King, Kochhar.


select last_name_2||','||last_name||','||last_name_1 as last_name from table order by last_name
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355074
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wlyaman,
гляньте
greatest/least

.....
stax
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355077
wlyaman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..wlyaman,
гляньте
greatest/least

.....
stax
хорошая идея, а как взять то, что между ними?
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355092
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wlyaman,

Для произвольного случая 10469921
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355094
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wlyamanstax..wlyaman,
гляньте
greatest/least

.....
stax
хорошая идея, а как взять то, что между ними?
влоб
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  1  with t as (
  2  select 2 a,3 b,1 c from dual union all
  3  select 3 a,3 b,1 c from dual union all
  4  select 2 a,3 b,3 c from dual union all
  5  select 4 a,4 b,4 c from dual
  6  )
  7  select
  8   least(a,b,c) a1
  9  ,case when a between least(a,b,c) and greatest(a,b,c) then a
 10        when b between least(a,b,c) and greatest(a,b,c) then b
 11        else c
 12        end b1
 13  ,greatest(a,b,c) c1
 14* from t
SQL> /

        A1         B1         C1
---------- ---------- ----------
         1          2          3
         1          3          3
         2          2          3
         4          4          4




зы
можно еще напр unpivot/pivot

.....
stax
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355095
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wlyamanхорошая идея, а как взять то, что между ними?

В общем случае и/или кода пoля могут иметь NULL значения что-то типа:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT  (
         SELECT  LISTAGG(COLUMN_VALUE,',') WITHIN GROUP(ORDER BY COLUMN_VALUE)
           FROM  TABLE(
                       SYS.ODCIVARCHAR2LIST(
                                            COL1,
                                            COL2,
                                            ...
                                            COLN
                                           )
                      )
        ) LAST_NAME
  FROM  SOME_TABLE
/



SY.
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355101
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopwlyaman,

Для произвольного случая 10469921
А с NULL тоже сработает?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t(last_name, last_name_1, last_name_2) as (select 'King', 'Kochhar', 'De Haan'
from dual union all select 'King', '', 'De Haan'
from dual union all select 'King', 'King', 'De Haan'
from dual
)
select (select listagg(column_value,',') within group (order by column_value) from table( sys.odcivarchar2list(last_name, last_name_1, last_name_2)))
from t
;
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355102
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..wlyamanпропущено...

хорошая идея, а как взять то, что между ними?
влоб
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  1  with t as (
  2  select 2 a,3 b,1 c from dual union all
  3  select 3 a,3 b,1 c from dual union all
  4  select 2 a,3 b,3 c from dual union all
  5  select 4 a,4 b,4 c from dual
  6  )
  7  select
  8   least(a,b,c) a1
  9  ,case when a between least(a,b,c) and greatest(a,b,c) then a
 10        when b between least(a,b,c) and greatest(a,b,c) then b
 11        else c
 12        end b1
 13  ,greatest(a,b,c) c1
 14* from t
SQL> /

        A1         B1         C1
---------- ---------- ----------
         1          2          3
         1          3          3
         2          2          3
         4          4          4




зы
можно еще напр unpivot/pivot

.....
stax
он чуть наврал between и на равно пашет

.....
stax
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355108
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous, SY


я так понял надо в три колонки, а не в одну


вместо beetween
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  1  with t as (
  2  select 1 id,2 a,3 b,1 c from dual union all
  3  select 2,3 a,3 b,1 c from dual union all
  4  select 3,2 a,3 b,3 c from dual union all
  5  select 4,4 a,4 b,4 c from dual
  6  )
  7  select id
  8  ,least(a,b,c) a1
  9  ,case when a > least(a,b,c) and a < greatest(a,b,c) then a
 10        when b > least(a,b,c) and b < greatest(a,b,c) then b
 11        when c > least(a,b,c) and c < greatest(a,b,c) then c
 12        else a
 13        end b1
 14  ,greatest(a,b,c) c1
 15* from t
SQL> /

        ID         A1         B1         C1
---------- ---------- ---------- ----------
         1          1          2          3
         2          1          3          3
         3          2          2          3
         4          4          4          4



ps
для больше 3-х я б использовал unpivot/pivot
.....
stax
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355116
wlyaman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..andrey_anonymous, SY


я так понял надо в три колонки, а не в одну


вместо beetween
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  1  with t as (
  2  select 1 id,2 a,3 b,1 c from dual union all
  3  select 2,3 a,3 b,1 c from dual union all
  4  select 3,2 a,3 b,3 c from dual union all
  5  select 4,4 a,4 b,4 c from dual
  6  )
  7  select id
  8  ,least(a,b,c) a1
  9  ,case when a > least(a,b,c) and a < greatest(a,b,c) then a
 10        when b > least(a,b,c) and b < greatest(a,b,c) then b
 11        when c > least(a,b,c) and c < greatest(a,b,c) then c
 12        else a
 13        end b1
 14  ,greatest(a,b,c) c1
 15* from t
SQL> /

        ID         A1         B1         C1
---------- ---------- ---------- ----------
         1          1          2          3
         2          1          3          3
         3          2          2          3
         4          4          4          4



ps
для больше 3-х я б использовал unpivot/pivot
.....
stax
Третий набор значений у Вас вывелся неправильно. В этом вот вся и загвоздка сейчас у меня, что могут быть одинаковые значения в столбцах, а как это учесть в CASE, не понятно.
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355119
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wlyamanТретий набор значений у Вас вывелся неправильно. В этом вот вся и загвоздка сейчас у меня, что могут быть одинаковые значения в столбцах, а как это учесть в CASE, не понятно.

шот туплю (невнимателен) я сегодня


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  1  with t as (
  2  select 1 id,2 a,3 b,1 c from dual union all
  3  select 2,3 a,3 b,1 c from dual union all
  4  select 3,2 a,3 b,3 c from dual union all
  5  select 4,4 a,4 b,4 c from dual
  6  )
  7  select id
  8  ,least(a,b,c) a1
  9  ,case when a between least(b,c) and greatest(b,c) then a
 10        when b between least(a,c) and greatest(a,c) then b
 11        when c between least(a,b) and greatest(a,b) then c
 12        else null
 13        end b1
 14  ,greatest(a,b,c) c1
 15* from t
SQL> /

        ID         A1         B1         C1
---------- ---------- ---------- ----------
         1          1          2          3
         2          1          3          3
         3          2          3          3
         4          4          4          4



.....
stax

....
stax
...
Рейтинг: 0 / 0
Объединение столбцов
    #39355423
wlyamanа как взять то, что между ними?среднимум из трех это максимум трех попарных максимумов.
...
Рейтинг: 0 / 0
Объединение столбцов
    #39356968
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или наоборотwlyamanа как взять то, что между ними?среднимум из трех это максимум трех попарных максимумов.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  1  with t as (
  2    select 1 id,2 a,3 b,1 c from dual union all
  3    select 2,3 a,3 b,1 c from dual union all
  4    select 3,2 a,3 b,3 c from dual union all
  5    select 4,4 a,4 b,4 c from dual
  6    )
  7    select id
  8    ,least(a,b,c) a1
  9    ,greatest(greatest(a,b),greatest(a,c),greatest(b,c)) b1
 10    ,greatest(a,b,c) c1
 11*  from t
SQL> /

        ID         A1         B1         C1
---------- ---------- ---------- ----------
         1          1          3          3
         2          1          3          3
         3          2          3          3
         4          4          4          4


мож наоборот

минимум из трех попарных максимумов

.....
stax
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Объединение столбцов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]