Упорядочить по определенным значениям в столбце без использования регистра - PullRequest
0 голосов
/ 04 августа 2011

Я хотел бы получить записи в следующем формате:

, если у меня есть запись типа

A, B, C, D 

, и я хочу получить запись в этом порядке -

B, A, C, D, E, F, G, H, so on,

Но мне нужно значение B должно быть в первом ряду ...

Ответы [ 3 ]

4 голосов
/ 04 августа 2011

попробуйте это:

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)
0 голосов
/ 04 августа 2011

Объявление и заполнение таблицы:

DECLARE @t TABLE (col1 CHAR)
INSERT @t
SELECT char(number+ 65)
FROM master..spt_values
WHERE type = 'P' AND number < 6 

Запрос1:

SELECT *, cast(ascii(col1)-66 as bit) * 2 + ascii(col1) [orderby]
FROM @t 
ORDER BY cast(ascii(col1)-66 as bit) * 2 + ascii(col1) 

Запрос2:

SELECT *
FROM @t 
ORDER BY replace(col1, 'B', ' ') 

Результат для запроса1: (столбец [orderby]только для документации)

col1 orderby
---- --------
B    66
A    67
C    69
D    70
E    71
F    72
0 голосов
/ 04 августа 2011
SELECT * from mytable where mycolumn = "B";

с последующим

SELECT * from mytable where mycolumn != "B" order by mycolumn asc;
...