0
以下查询中的问题是什么?按字母数字值排序的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个要求只是相冲突的。 :)如果您将保持名称顺序,那么它会正确显示其行为。 –