2015-12-01 37 views

回答

0

在你查詢排序由2列。一個是基於@sortby變量,另一個是name第二個最後一行下面的查詢。問題是,當你只挑選整數部分Id它是10這三行你在上面提到你的問題,然後命令通過基於第二列[名稱]適用,這是A10BB10A。如果您從您的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 
+0

是的,我明白這一點。但我想在我的第二列。有什麼方法可以解決它嗎? – jestges

+0

你的2個要求只是相沖突的。 :)如果您將保持名稱順序,那麼它會正確顯示其行爲。 –