Oracle sql функции - PullRequest
       3

Oracle sql функции

0 голосов
/ 16 ноября 2010

У меня есть таблица со столбцом с именем Type, которая может иметь три значения (name1, name2, name3).

Могу ли я написать запрос, который сначала возвращает записис Type = name1, а затем строки со значениями name2 и name3 с предложением WHERE, поэтому я могу отфильтровать их, например, по CreationDate?

Это значит, вернутьза день 01/01/2000:

row  'name1'
row  'name1'
(rest of the rows)

Id   Type    CreationDate  
1,  'name1', '2000/01/01'  
8,  'name1', '2000/01/01'  
18, 'name3', '2000/01/01'  
82, 'name2', '2000/01/01'  
11, 'name2', '2000/01/01'  
12, 'name3', '2000/01/01'  
2,  'name1', '2000/01/02'  
4,  'name1', '2000/01/02'  
98, 'name2', '2000/01/02'  

Для каждого дня сначала получайте записи типа 'name1', а затем остальные типы без порядка.

Спасибо!Udo.

Ответы [ 3 ]

5 голосов
/ 16 ноября 2010

Вы можете заказать по дате создания, а затем набрать. Если вам нужно определить порядок типа, вы можете использовать регистр.

SELECT id, Type, CreationDate
FROM  "table"
ORDER BY CreationDate ASC,
         CASE WHEN Type = 'name1' THEN 1
              ELSE 2
         END ASC
0 голосов
/ 16 ноября 2010

Звучит так, как будто вы захотите расставить приоритеты только на основе даты и типа = 'name1' и, в частности, хотите, чтобы оставшийся порядок был случайным по своему характеру.Если это так, вы можете добавить dbms_random.value в качестве третьего элемента в ORDER BY в запросе PMV или Insane.Пример таблицы и пример следующие:

create table Table1 (Id Number(2), Type Varchar2(5), CreationDate Date);
insert into Table1 Values ( 1,'name1',to_date('01/01/2000','MM/DD/YYYY'));
insert into Table1 Values ( 8,'name1',to_date('01/01/2000','MM/DD/YYYY'));
insert into Table1 Values (18,'name3',to_date('01/01/2000','MM/DD/YYYY'));
insert into Table1 Values (82,'name2',to_date('01/01/2000','MM/DD/YYYY'));
insert into Table1 Values (11,'name2',to_date('01/01/2000','MM/DD/YYYY'));
insert into Table1 Values (12,'name3',to_date('01/01/2000','MM/DD/YYYY'));
insert into Table1 Values ( 2,'name1',to_date('01/02/2000','MM/DD/YYYY'));
insert into Table1 Values ( 4,'name1',to_date('01/02/2000','MM/DD/YYYY'));
insert into Table1 Values (98,'name2',to_date('01/02/2000','MM/DD/YYYY'));

SELECT Id, Type, CreationDate FROM Table1
ORDER BY CreationDate, decode(Type , 'name1', 0, 1) ASC, dbms_random.value;
0 голосов
/ 16 ноября 2010

Ответ PMV, приведенный выше, должен работать нормально. Если использовать это как альтернативный вариант.

SELECT id, Type, CreationDate
FROM  "table" 
ORDER BY CreationDate, decode(Type , 'name1', 0, 1), Type ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...