答案 0 :(得分:0)
在查询中,您按2列排序。一个基于@sortby
变量,另一个基于name
,位于下方查询的倒数第二行。问题是,当你只选择Id
的整数部分时,你在上面的问题中提到的这三行是10,那么按第二列排序[name] 适用,A
为10B
,B
为10A
。如果从order by子句中删除name列,则会得到正确的结果。希望这能解决你的问题。
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