Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос в Оракле [D7]


Дмитрий_Б ©   (2006-03-01 15:21:00) 

Здравствуйте. Помогите пож-та правильно составить запрос. Есть запрос, возвращающий такой рез-т:
Field_1    Field_2

NNN         1              
NNN         2              
SSS         3              
SSS         4              
SSS         5              
CCC         6
CCC         7
PPP         8
CCC       NULL
SSS       NULL
NNN       NULL

Далее рез-т запроса необходимо привести к такому виду:
Field_1    Field_2

NNN         1              
NNN         2  
NNN         NULL
SSS         3              
SSS         4              
SSS         5      
SSS         NULL        
CCC         6
CCC         7
CCC         NULL
PPP         8

Заранее спасибо.


GreenF   (2006-03-02 17:52:00) [1]

select t1.field_1,
      t1.field_2      
from my_table t1,
    (select t2.field_1, max(t2.field_2) + 0.1 as m_field_2
     from my_table t2
     group by t2.field_1 )  t3
where t1.field_1 = t3.field_1
order by nvl(t1.field_2, t3.m_field_2)


evvcom   (2006-03-02 09:34:00) [2]


> просто в одних СУБД NULL больше всего, в других - меньше
> всего
> поэтому сортировать его однозначно не получится

Для Оракла ORDER BY Field NULLS LAST (или FIRST)


Дмитрий_Б   (2006-03-01 18:01:00) [3]

Функцию написал, возвращающую старшинство (приоритет) поля Field_1.
А в запросе потом делаю order by myfunc(value). Ничего нетривиального.


vovnuke   (2006-03-01 16:53:00) [4]

продемонстрируй, если не сложно


Дмитрий_Б   (2006-03-01 16:49:00) [5]

Всем спасибо за участие, решение найдено.


Sergey13   (2006-03-01 16:24:00) [6]

2[10] Desdechado ©   (01.03.06 16:18)
Да нет. Тут вопрос в первом поле и в неправильности его сортировки. Я просто сразу не въехал.

2 [9] Дмитрий_Б ©   (01.03.06 16:18)
>Да, но я не знаю, какие конкретно значения могут быть вместо NNN, SSS...
А откуда тогда приоритет?


Дмитрий_Б   (2006-03-01 16:24:00) [7]

А, ну да :) спасибо.


Reindeer Moss Eater   (2006-03-01 16:20:00) [8]

Да, но я не знаю, какие конкретно значения могут быть вместо NNN, SSS...

<Цитата>

Нам дан конкретный набор и спрошено как его привести к другому конкретному набору.


Reindeer Moss Eater   (2006-03-01 16:19:00) [9]

Нет все же [7]


Desdechado   (2006-03-01 16:18:00) [10]

Sergey13 ©   (01.03.06 15:59) [5]
просто в одних СУБД NULL больше всего, в других - меньше всего
поэтому сортировать его однозначно не получится


Дмитрий_Б   (2006-03-01 16:18:00) [11]

Да, но я не знаю, какие конкретно значения могут быть вместо NNN, SSS...


Reindeer Moss Eater   (2006-03-01 16:17:00) [12]

А еще точнее так
select * from table
order by Field2,decode(Field1,'NNN',1,'SSS',2,'CCC',3,'PPP',4,5)


Reindeer Moss Eater   (2006-03-01 16:14:00) [13]

Точнее так
select * from table
order by decode(Field1,'NNN',1,'SSS',2,'CCC',3,'PPP',4,5),Field2


Reindeer Moss Eater   (2006-03-01 16:10:00) [14]

select * from table
order by decode(Field1,NNN,1,SSS,2,CCC,3,PPP,4,5),Field2


Sergey13   (2006-03-01 15:59:00) [15]

Я что то не въезжаю. А Order by 1,2 применить к исходному запросу не проканает что-ли?


Дмитрий_Б   (2006-03-01 15:52:00) [16]

У меня появилась пара мыслей, но все предложения принимаются :)


DenK_vrtz   (2006-03-01 15:45:00) [17]

Если Field_1 сортируется не по алфавиту, то получается, что на Field_1 наложен некий статус старшинства, поэтому без ввода нового значения для упорядочивания, я думаю, не обойтись.
Идея примерно такова.

SELECT c, i FROM
(
SELECT 'NNN' c, 1 i, 1 n FROM DUAL  
UNION ALL            
SELECT 'NNN' c, 2 i, 1 n FROM DUAL
UNION ALL              
SELECT 'SSS' c, 3 i, 2 n FROM DUAL              
UNION ALL
SELECT 'SSS' c, 4 i, 2 n FROM DUAL              
UNION ALL
SELECT 'SSS' c, 5 i, 2 n FROM DUAL              
UNION ALL
SELECT 'CCC' c, 6 i, 3 n FROM DUAL
UNION ALL
SELECT 'CCC' c, 7 i, 3 n FROM DUAL
UNION ALL
SELECT 'PPP' c, 8 i, 4 n FROM DUAL
UNION ALL
SELECT 'CCC' c, to_number(null) i, 3 n FROM DUAL
UNION ALL
SELECT 'SSS' c, to_number(null) i, 2 n FROM DUAL
UNION ALL
SELECT 'NNN' c, to_number(null) i, 1 n FROM DUAL
)
ORDER BY n,i

при условии, что не будет комбинации
     NNN   9


vovnuke   (2006-03-01 15:37:00) [18]

извиняюсь, гоню


vovnuke   (2006-03-01 15:31:00) [19]

select Field_1, Field_2
 from Table
group by Field_2, Field_1

Но это если значение Field_2, не повторяется.


Наверх

Титульная страница Поиск, карта сайта Написать письмо