попробуйте это:
SELECT
*, 1 AS SortBy
FROM YourTable
WHERE YourCol='B'
UNION ALL
SELECT
*, 2 AS SortBy
FROM YourTable
WHERE YourCol!='B'
ORDER BY SortBy, YourCol
У вас нет причин отказываться от использования CASE
.Я бы все-таки попробовал посмотреть, какой из них быстрее, метод UNION ALL
или CASE
:
SELECT
*
FROM YourTable
ORDER BY CASE WHEN YourCol='B' then 1 ELSE 2 END, YourCol
РЕДАКТИРОВАТЬ Рабочий пример:
DECLARE @YourTable table (YourCol char(1), RowValue varchar(5))
INSERT @YourTable VALUES ('A','aaa')
INSERT @YourTable VALUES ('A','aa')
INSERT @YourTable VALUES ('B','bbb')
INSERT @YourTable VALUES ('B','bb')
INSERT @YourTable VALUES ('C','ccc')
INSERT @YourTable VALUES ('D','ddd')
INSERT @YourTable VALUES ('E','eee')
INSERT @YourTable VALUES ('F','fff')
SELECT
*, 1 AS SortBy
FROM @YourTable
WHERE YourCol='B'
UNION ALL
SELECT
*, 2 AS SortBy
FROM @YourTable
WHERE YourCol!='B'
ORDER BY SortBy, YourCol
ВЫХОД:
YourCol RowValue SortBy
------- -------- -----------
B bbb 1
B bb 1
A aaa 2
A aa 2
C ccc 2
D ddd 2
E eee 2
F fff 2
(8 row(s) affected)