sql выберите, чтобы начать с определенной записи

0

Есть ли способ записать выбранную запись, начиная с конкретной записи? Предположим, у меня есть таблица со следующими данными:

 SNO    ID  ISSUE
 ----------------------
   1    A1  unknown
   2    A2  some_issue
   3    A1  unknown2
   4    B1  some_issue2
   5    B3  ISSUE4
   6    B1  ISSUE4

Могу ли я написать выбор для начала показа записей, начинающихся с B1, а затем оставшихся записей? Результат должен быть примерно таким:

4    B1  some_issue2
6    B1  ISSUE4
1    A1  unknown
2    A2  some_issue
3    A1  unknown2
5    B3  ISSUE4

Не важно, является ли последний B3 последним, только сначала должен отображаться B1.

  • 0
    Как вы определяете, какая «ценность» должна стоять на первом месте? вес, личный выбор?
  • 0
    Что это за БД? MySQL?
Показать ещё 1 комментарий
Теги:

3 ответа

7
Лучший ответ

Пара различных вариантов в зависимости от того, что вы "знаете" раньше времени (т.е. идентификатор записи, который вы хотите быть первым, sno и т.д.):

Союзный подход:

select   1 as sortOrder, SNO, ID, ISSUE
from     tableName
where    ID = 'B1'
union all
select   2 as sortOrder, SNO, ID, ISSUE
from     tableName
where    ID <> 'B1'
order by sortOrder;

Оператор дела по порядку:

select   SNO, ID, ISSUE
from     tableName
order by case when ID = 'B1' then 1 else 2 end;

Вы также можете рассмотреть использование временных таблиц, cte и т.д., но эти подходы, вероятно, будут менее эффективными... попробуйте несколько разных подходов в вашей среде, чтобы увидеть, какие из них лучше всего работают.

  • 0
    большое Вам спасибо. я искал подход к делу.
0

Предполагая, что вы используете MySQL, вы можете использовать IF() в предложении ORDER BY...

SELECT SNO, ID, ISSUE FROM table ORDER BY IF( ID = 'B1', 0, 1 );

... или вы можете определить функцию, которая накладывает порядок сортировки...

DELIMITER $$
CREATE FUNCTION my_sort_order( ID VARCHAR(2), EXPECTED VARCHAR(2) )
RETURNS INT
BEGIN
  RETURN IF( ID = EXPECTED, 0, 1 );
END$$
DELIMITER ;

SELECT SNO, ID, ISSUE FROM table ORDER BY my_sort_sort( ID, 'B1' );
-1
select * from table1
where id = 'B1'
union all
select * from table1
where id <> 'B1'
  • 0
    почему этот ответ пошел -1?
  • 0
    Не уверен (т. Е. Я не проголосовал против), но я мог бы предположить, что это может быть связано с тем, что для гарантии порядка сортировки вам необходимо добавить предложение «упорядочить по» (т. Е. Для этого запроса будет возможность вернуть данные в любом заказ). Не уверен, что стоит понизить голос или нет, особенно без комментариев, но это мое предположение.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню