![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос в Оракле [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, не повторяется.