Предполагая, что ваш столбец имеет формат 'NNNNAAA' (N-числовой, A-алфавит), вы можете использовать
ORDER BY
CAST(CASE WHEN PATINDEX('%[a-zA-Z]%', description) > 0 THEN 0 ELSE -1 END AS INT),
CAST(CASE WHEN substring(description,PATINDEX('%[0-9]%', description),ISNULL( NULLIF( PATINDEX('%[a-zA-Z]%', description) - 1, -1 ),LEN(description) )) = '' THEN 2147483647
ELSE substring(description,PATINDEX('%[0-9]%', description),ISNULL( NULLIF( PATINDEX('%[a-zA-Z]%', description) - 1, -1 ),LEN(description) ))
END AS INT),
substring(description,PATINDEX('%[a-zA-Z]%', description),LEN(description) - PATINDEX('%[a-zA-Z]%', description) + 1
Объяснить:
PATINDEX возвращает мне первый альфа-индекс / первый числовой индекс в этой строке. Итак, сначала я сортирую вывод по наличию числовой части или нет, а затем сортирую по альфа-части. Надеюсь, это поможет вам.