2016-06-06 6 views
1

У меня есть таблица с возвращениями, такими как 12x90, 12X120, 12X160 и т.д.Не удается получить правильный вид с SQL Server 2008

Цифры после «Х» являются весами. Мне нужно проложить весы только с ведущими нулями, чтобы 90 стали 090. Обычный сорт поставит 90 последних вместо первого, мне нужен список, отсортированный правильно, по весу.

Как я могу это достичь?

+0

Добавить 'sortorder' колонку? –

+0

Любая нормальная сортировка не ставит 90 сначала, потому что вы выполняете сортировку строк. Вам нужно либо сортировать только часть строки, отлитую от числа, либо лучший подход заключается в том, чтобы ввести ключ сортировки, который вы можете рассчитать и отсортировать по –

ответ

2

Используйте charindex, чтобы получить номер после X в колонке и заказать по этому номеру.

select * from tablename 
order by cast(case when charindex('X',col) > 0 then substring(col,charindex('X',col)+1,len(col)) 
     else col end as numeric) 

Если строка перед X также следует учитывать для сортировки, используйте

select * from tablename 
order by 
cast(case when charindex('X',col) > 0 then substring(col,1,charindex('X',col)-1) 
else col end as numeric) 
,cast(case when charindex('X',col) > 0 then substring(col,charindex('X',col)+1,len(col)) 
else col end as numeric) 

Sample demo

+0

. Это все равно дает то же самое, что и в случае с (65), которое появляется после 336 . – Obfuscated

+0

«X» не используется, он будет в каждом возврате. – Obfuscated

+0

Вы проверили последнюю версию? Я выбрал подстроку как числовую. он должен работать. –

0

использовать перекрестный применять

select 
b.* from table t1 
cross apply 
(select replace(t.weight,'12x','') as replaced from table t2 where t2.weight=t1.weight) b 
order by b.replaced 
+0

Все те же результаты. – Obfuscated

Смежные вопросы