Вниз
Скачать: CL | DM;

Запрос в Оракле   Найти похожие ветки 

← →
Дмитрий_Б ©   (2006-03-01 15:21) [0]

Здравствуйте. Помогите пож-та правильно составить запрос. Есть запрос, возвращающий такой рез-т:
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

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


← →
vovnuke ©   (2006-03-01 15:31) [1]

select Field_1, Field_2
 from Table
group by Field_2, Field_1

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


← →
vovnuke ©   (2006-03-01 15:37) [2]

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


← →
DenK_vrtz ©   (2006-03-01 15:45) [3]

Если 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


← →
Дмитрий_Б ©   (2006-03-01 15:52) [4]

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


← →
Sergey13 ©   (2006-03-01 15:59) [5]

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


← →
Reindeer Moss Eater ©   (2006-03-01 16:10) [6]

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


← →
Reindeer Moss Eater ©   (2006-03-01 16:14) [7]

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


← →
Reindeer Moss Eater ©   (2006-03-01 16:17) [8]

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


← →
Дмитрий_Б ©   (2006-03-01 16:18) [9]

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


← →
Desdechado ©   (2006-03-01 16:18) [10]

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


← →
Reindeer Moss Eater ©   (2006-03-01 16:19) [11]

Нет все же [7]


← →
Reindeer Moss Eater ©   (2006-03-01 16:20) [12]

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

<Цитата>

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


← →
Дмитрий_Б ©   (2006-03-01 16:24) [13]

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


← →
Sergey13 ©   (2006-03-01 16:24) [14]

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

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


← →
Дмитрий_Б ©   (2006-03-01 16:49) [15]

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


← →
vovnuke ©   (2006-03-01 16:53) [16]

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


← →
Дмитрий_Б ©   (2006-03-01 18:01) [17]

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


← →
evvcom ©   (2006-03-02 09:34) [18]


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

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


← →
GreenF   (2006-03-02 17:52) [19]

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)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.025 c
15-1143710570
Kolan
2006-03-30 13:22
2006.04.23
Как в Delphi 2006 задать рабочюю папку?


3-1141289804
Oxy
2006-03-02 11:56
2006.04.23
Строка подключения к аксессу


15-1143631131
Ketmar
2006-03-29 15:18
2006.04.23
очень глупый баг %-)


3-1141387721
[AleX]
2006-03-03 15:08
2006.04.23
DBGrid &amp; ADO и не только....


15-1144042354
Ega23
2006-04-03 09:32
2006.04.23
С Днём рождения! 1 апреля




   Наверх