Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Специальная сортировка результата  [new]
gelos
Member

Откуда:
Сообщений: 31
Есть таблица с такими строками usr_test1 (acnt_с,acnt_d)

ACNT_C ACNT_D
----- -----
1 g f
2 b m
3 aa b
4 cc b
5 dd b
6 xx v
7 v a
8 nn v

Необходимо отсортировать результат так что если в колонке ACNT_C есть уже значение содержащееся в колонке ACNT_D, (например в строках 3,4,5 значение b в колонке ACNT_C есть в строке 2 в поле ACNT_D ),то сначала должны следовать записи где это значение содержится в колонке ACNT_D, а только потом уже запись где такое значение есть в ACNT_D. Т.е . в данном случае
сначала строки 3,4,5 а только потом строка 2.
Т.е. результат может быть таким

xx v
nn v
v a
aa b
cc b
dd b
b m
g f

В какую сторону копать...
19 авг 10, 13:12    [9289668]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
gelos
если в колонке ACNT_C есть уже значение
case when exists
?
19 авг 10, 13:14    [9289691]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
gelos
Member

Откуда:
Сообщений: 31
Извините таблица usr_testn(acnt_d,acnt_c)

ACNT_D ACNT_C
----- -----
1 g f
2 b m
3 aa b
4 cc b
5 dd b
6 xx v
7 v a
8 nn v
19 авг 10, 13:14    [9289692]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
gelos
Member

Откуда:
Сообщений: 31
CASE не подходить так как мне надо знать значение не только текущей записи, а проанализировать во всех строках
19 авг 10, 13:16    [9289722]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
with usr_testn as(
select 1 as id, 'g' as acnt_d, 'f' as acnt_c from dual union all
select 2 as id, 'b' as acnt_d, 'm' as acnt_c from dual union all
select 3 as id, 'aa' as acnt_d, 'b' as acnt_c from dual union all
select 4 as id, 'cc' as acnt_d, 'b' as acnt_c from dual union all
select 5 as id, 'dd' as acnt_d, 'b' as acnt_c from dual union all
select 6 as id, 'xx' as acnt_d, 'v' as acnt_c from dual union all
select 7 as id, 'v' as acnt_d, 'a' as acnt_c from dual union all
select 8 as id, 'nn' as acnt_d, 'v' as acnt_c from dual 
)
select * 
  from usr_testn t1
 order by case when exists (select *
                              from usr_testn t2
                             where t2.acnt_c = t1.acnt_d)
               then acnt_d 
               else acnt_c
                end
         ,case when exists (select *
                              from usr_testn t2
                             where t2.acnt_c = t1.acnt_d)
               then 2 
               else 1
                end
19 авг 10, 13:27    [9289843]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Человек и Кошка
Member

Откуда: настоящему индейцу завсегда везде ништяк (с)
Сообщений: 830
select a.acnt_c, a.acnt_d
from tab a, tab b
where a.acnt_d = b.acnt_c(+)
order by nvl2(b.acnt_c, a.acnt_d, a.acnt_c), nvl2(b.acnt_c, 0, 1)
?
19 авг 10, 13:36    [9289938]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Человек и Кошка
при замене exists на left join правилом хорошего тона является добавка условий типа where left_table.id is null
ато данные размножатся
19 авг 10, 13:40    [9289976]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
*я имел в виду not exists, извините
19 авг 10, 13:41    [9289980]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Человек и Кошка
Member

Откуда: настоящему индейцу завсегда везде ништяк (с)
Сообщений: 830
Паганель
*я имел в виду not exists, извините

Ладно, извиняю :)
19 авг 10, 13:43    [9290006]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Человек и Кошка
Ладно, извиняю :)
Может, переделаете свой запрос?
Автор же просил только отсортировать...
19 авг 10, 13:44    [9290021]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Человек и Кошка
Member

Откуда: настоящему индейцу завсегда везде ништяк (с)
Сообщений: 830
Паганель
Может, переделаете свой запрос?

from tab a, (select distinct acnt_c from tab) b
Ты об этом? Я может слишком буквально понимаю, но:
gelos
сначала должны следовать записи где это значение содержится в колонке ACNT_D, а только потом уже запись...
19 авг 10, 13:57    [9290173]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Человек и Кошка
Ты об этом?
Да. Теперь данные не размножаются
19 авг 10, 14:01    [9290212]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
makitka
Member

Откуда: FROM dual
Сообщений: 886
Паганель
Человек и Кошка
Ты об этом?
Да. Теперь данные не размножаются

join по дистинкту - отличная вещь
19 авг 10, 14:02    [9290220]     Ответить | Цитировать Сообщить модератору
 Re: Специальная сортировка результата  [new]
gelos
Member

Откуда:
Сообщений: 31
Спасибо большое все получилось... Идея понятна
19 авг 10, 18:33    [9292794]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить