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個要求只是相沖突的。 :)如果您將保持名稱順序,那麼它會正確顯示其行爲。 –