TSQL упорядочить, но сначала показать эти - PullRequest
1 голос
/ 18 апреля 2019

Я исследую набор данных.
И мне просто интересно, есть ли способ сделать заказ, как показано ниже в 1 запросе

Select * From MyTable where name ='international%' order by id
Select * From MyTable where name != 'international%' order by id

Итак, сначала показываются все международные товары, затем по именам, которые неначните с международного.

Мой вопрос не в том, чтобы добавить столбцы, чтобы сделать эту работу, или использовать несколько БД, или больший скрипт TQL для клонирования БД в новый порядок.
Мне просто интересно, будет ли что-нибудь после ' Где или заказ на 'может быть обманут для этого.

Ответы [ 2 ]

4 голосов
/ 18 апреля 2019

Вы можете использовать выражения в ORDER BY:

Select * From MyTable
order by
  CASE
    WHEN name like 'international%' THEN 0
    ELSE 1
  END,
  id

(Из вашего рассказа это также звучало так, как вы хотели like, а не =, поэтому я тоже это изменил)

0 голосов
/ 18 апреля 2019

Другой способ (чуть чище и чуть быстрее)

-- Sample Data
DECLARE @mytable TABLE (id INT IDENTITY, [name] VARCHAR(100));    
INSERT  @mytable([name])
VALUES('international something' ),('ACME'),('international waffles'),('ABC Co.');

-- solution
SELECT t.*
FROM @mytable AS t
ORDER BY -PATINDEX('international%', t.[name]);

Обратите внимание, что вы можете добавить постоянный вычисляемый столбец для -PATINDEX('international%', t.[name]), чтобы ускорить процесс.

...