TSQL упорядочить по, но сначала покажите эти

#tsql #sql-order-by

#tsql #sql-order-by

Вопрос:

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

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

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

Мой вопрос не о добавлении столбцов, чтобы заставить это работать, или об использовании нескольких БД, или о более крупном скрипте CSQL для клонирования БД в новый порядок.
мне просто интересно, можно ли обмануть что-нибудь после ‘Where или order by‘, чтобы сделать это.

Ответ №1:

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

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

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

Комментарии:

1. На самом деле это отличный способ сделать это, потому что можно добавить несколько операторов Case, поэтому можно добавить несколько первых заказов (ea International, Europe, National, provincial, city, local)

Ответ №2:

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

 -- 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]) ускорения процесса.

Комментарии:

1. также работает, но это не решение после «где»