Помогите с T-sql специальными правилами сортировки - PullRequest
1 голос
/ 27 сентября 2010

У меня есть поле вроде:

SELECT * FROM 
(
    SELECT 'A9t' AS sortField UNION ALL 
    SELECT 'A10t' UNION ALL 
    SELECT 'A11t' UNION ALL 
    SELECT 'AB9F' UNION ALL 
    SELECT 'AB10t' UNION ALL        
    SELECT 'AB11t'  
) t ORDER BY sortField

и результат:

sortField
---------
A10t
A11t
A9t
AB10t
AB11t
AB9F

На самом деле мне нужно объединить правила сортировки строк и чисел:

sortField
---------
A9t
A10t
A11t
AB9F
AB10t
AB11t

Ответы [ 3 ]

4 голосов
/ 27 сентября 2010
SELECT   *
FROM     ( 
            SELECT 'A9t' AS sortField UNION ALL 
            SELECT 'A10t' UNION ALL 
            SELECT 'A11t' UNION ALL 
            SELECT 'AB9F' UNION ALL 
            SELECT 'AB10t' UNION ALL        
            SELECT 'AB11t' 
         )
         t
ORDER BY LEFT(sortField,PATINDEX('%[0-9]%',sortField)-1)                                                                                       ,
         CAST(substring(sortField,PATINDEX('%[0-9]%',sortField),1 + PATINDEX('%[0-9][A-Z]%',sortField) -PATINDEX('%[0-9]%',sortField) ) AS INT),
         substring(sortField,PATINDEX('%[0-9][A-Z]%',sortField)   + 1,LEN(sortField))
1 голос
/ 27 сентября 2010

Если первый символ всегда является буквой, попробуйте:

SELECT * FROM 
(
    SELECT 'A9t' AS sortField UNION ALL 
    SELECT 'A10t' UNION ALL 
    SELECT 'A11t'
) t ORDER BY substring(sortField,2,len(sortField)-1) desc
0 голосов
/ 27 сентября 2010

Я бы сказал, что вы объединили буквенную и числовую сортировку. Но я думаю, что вы спрашиваете, что вы хотите отсортировать буквы в порядке возрастания и числа в порядке убывания, и это может быть трудно сделать красивым способом. Предыдущие ответы не будут работать для вашей проблемы, проблема в том, что решение Мартина Смита не принимает строки с двумя буквами в качестве префикса, а Parkyprg не сортирует числа перед буквами, как вы просите.

Вам нужно использовать собственный заказ, см. Пример здесь: http://www.emadibrahim.com/2007/05/25/custom-sort-order-in-a-sql-statement/,, но это утомительный способ сделать это.

РЕДАКТИРОВАТЬ : решение Martins Smith обновлено и работает просто отлично!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...