Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
Дмитрий_Б ©   (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 вся ветка

Форум: "Базы";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1144649763
lionmen
2006-04-10 10:16
2006.04.23
Выбор принтеров


15-1144165279
Бугага
2006-04-04 19:41
2006.04.23
Автоматизация идет полным ходом :)


15-1144157732
VEZ
2006-04-04 17:35
2006.04.23
Entherprise or Architect


2-1144405733
zorik
2006-04-07 14:28
2006.04.23
Станартные функции работы со строками


6-1136908622
GanibalLector
2006-01-10 18:57
2006.04.23
Select (Socket API)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский