В чем проблема в нижнем запросе?SQL-запрос для заказа по альфа-числовым значениям
Ожидаемый результат 10, 10A, 10B в нижнем экране. Но что-то не так в моем запросе.
Вот мой sqlfiddle ссылку. http://sqlfiddle.com/#!3/3bbfe/1
В чем проблема в нижнем запросе?SQL-запрос для заказа по альфа-числовым значениям
Ожидаемый результат 10, 10A, 10B в нижнем экране. Но что-то не так в моем запросе.
Вот мой sqlfiddle ссылку. http://sqlfiddle.com/#!3/3bbfe/1
В вашем запросе вы сортировки по 2 колонки. Один из них основан на переменной @sortby
, а другой - name
на второй последней строке вашего запроса ниже. Вопрос в том, когда вы только выбирая целой части из Id
это 10 для этих трех строк вы упомянули в вашем вопросе выше, то распоряжений на основе второго столбца [имя] применяется, который A
для 10B
и B
за 10A
. Если вы удалите столбец имен из предложения order by, вы получите правильный результат. Надеюсь, это решит вашу проблему.
declare @sortby varchar(100)
set @sortby = 'Id'
select * from emp
ORDER BY
CASE @sortby
WHEN 'Id' THEN
CASE
WHEN ISNUMERIC(Id)=1
THEN CAST(Id as int)
WHEN PATINDEX('%[^0-9]%',Id) > 1
THEN CAST(LEFT(Id,PATINDEX('%[^0-9]%',Id) - 1) as int)
ELSE 2147483648
END
End,
CASE @sortby
WHEN 'Name' THEN
Case
WHEN ISNUMERIC(Id)=1
THEN NULL
WHEN PATINDEX('%[^0-9]%',Id) > 1
THEN SUBSTRING(Id,PATINDEX('%[^0-9]%',Id) ,50)
ELSE Id
END
End
, Name
DROP TABLE Emp
Да, я это понимаю. Но я хочу иметь вторую колонку и в моем роде. Есть ли способ исправить это? – jestges
Ваши 2 требования просто противоречивы. :) если вы будете держать имя в порядке, то оно будет корректно показывать свое поведение. –