2012-11-23 52 views
-2

我的表數據,如在SQL Server排序表

id LedgerName 
1 "105 AAA" 
2 "102 sss" 
3 "GGGG" 
4 "107 BBB" 
5 "BBBB" 
6 "101 TTT" 

我想排序總帳像

6 "101 TTT" 
2 "102 sss" 
1 "105 AAA" 
4 "107 BBB" 
5 "BBBB" 
3 "GGGG" 

正常秩序的不工作。 我使用拆分功能來分割數量爲基礎的排序順序.. 如何解決這個問題

+2

你不必拆分數據進行排序,一個簡單的「LedgerName命令」將做 –

回答

5

隨着你提供了一個正常的訂單由LedgerName正在做你想做的。
以下是處理稍微複雜一點的數據的版本。

SQL Fiddle

MS SQL Server 2008的架構設置

create table YourTable 
(
    id int, 
    LedgerName varchar(20) 
) 

insert into YourTable values 
(1, '105 AAA' ), 
(2, '1020 sss'), 
(3, ' '  ), 
(4, null  ), 
(5, '0'  ), 
(6, '999 sss' ), 
(7, '9999 sss'), 
(8, 'GGGG' ), 
(9, '107 BBB' ), 
(10, 'BBBB' ), 
(11, '101 TTT' ) 

查詢1

select id, 
     LedgerName 
from YourTable 
order by case when patindex('%[^0-9]%', isnull(LedgerName, '')+' ') = 1 then 1 else 0 end, 
     cast(left(LedgerName, patindex('%[^0-9]%', LedgerName+' ')-1) as int), 
     LedgerName 

Results

| ID | LEDGERNAME | 
------------------- 
| 5 |   0 | 
| 11 | 101 TTT | 
| 1 | 105 AAA | 
| 9 | 107 BBB | 
| 6 | 999 sss | 
| 2 | 1020 sss | 
| 7 | 9999 sss | 
| 4 |  (null) | 
| 3 |   | 
| 10 |  BBBB | 
| 8 |  GGGG | 
+0

完美的工作..非常感謝 –