2013-02-20 4 views
3

рассмотрим базу данных, имеющуюSQL- упорядочения на основе двух столбцов в таблице

checkID record_number data Order_number 
a    0  1  2 
a    1  2  0 
a    2  3  1 
a    3  4  3 

Найти запрос, который извлекает записи в соответствии с колонкой ORDER_NUMBER ieprocedure должен возвращать данные:

having record _number 2 then 
having record _number 0 then 
having record _number 1 then 
having record _number 3 

Есть любое соединение или другой запрос для этого?

ответ

1
SELECT * 
FROM tablename 
ORDER BY CASE WHEN record_number = 2 THEN 0 ELSE 1 END, record_number; 

SQL Fiddle Demo

Это даст вам ваши данные в следующем порядке:

| CHECKID | RECORD_NUMBER | DATA | ORDER_NUMBER | 
------------------------------------------------- 
|  a |    2 | 3 |   1 | 
|  a |    0 | 1 |   2 | 
|  a |    1 | 2 |   0 | 
|  a |    3 | 4 |   3 | 
+0

Что вам использовать форматирование результаты ваших данных? Как вы можете [см.] (Http://stackoverflow.com/a/14977123/447156), я потерпел неудачу на этом :). –

+0

Спасибо за ответы, но я хочу обобщить их .. так что упорядочение может происходить динамически .. первый столбец будет таким же (checkID), это первичный ключ. и хотите обобщить его на N количество результатов. – Ankit

+0

@Ankit - так что для n числа результатов должно быть выполнено n case ordering. Правильно?? 'с записью _number 2 then', ... tell n? –

1
select * 
from YourTable 
order by 
     case record_number 
     when 2 then 1 
     when 0 then 2 
     when 1 then 3 
     when 3 then 4 
     end 
1

Вы можете использовать CASE WHEN на этой ситуации .;

SELECT * 
FROM tbl 
ORDER BY CASE record_number 
       WHEN 2 THEN 1 
       WHEN 0 THEN 2 
       WHEN 1 THEN 3 
       WHEN 3 THEN 4 
       END 

Вот SQL Fiddle DEMO.

| CHECKID | RECORD_NUMBER | DATA | ORDER_NUMBER | 
------------------------------------------------- 
|  a |    2 | 3 |   1 | 
|  a |    0 | 1 |   2 | 
|  a |    1 | 2 |   0 | 
|  a |    3 | 4 |   3 | 
+1

Рядом с кнопкой «Запустить SQL» имеется небольшая стрелка, нажмите ее и выберите «Markdown Output». –

+0

@MahmoudGamal О, это было хорошо! Спасибо и +1 .. –

1

Наилучшим решением было бы создать дополнительную таблицу для сортировки чеков, например:

record_number sort_seq 
    2    1 
    0    2 
    1    3 
    3    4 

затем объединить его с таблицей

select c.* 
from check as c 
    join sortSeq as s on c.record_number=s.record_number 
order by s.sort_seq 
0
SELECT * 
FROM tablename 
ORDER BY Order_number 
Смежные вопросы