2014-01-31 36 views
0

我想爲tblCustomer表做012xx自定義排序。如何在SQL Server 2005中自定義排序

CustomerCode包括(3 char of Surname) + 1 + (PostCode)

這裏,1,如果同姓郵編客戶發現將遞增。

例如, ABB12615ABB22615

所以主要是我想

First 3 Letters of Surname + Index + PostCode. 

排序此我想以這種方式來做:

ORDER BY CHARINDEX(SUBSTRING(customerCode, 1, 3), customerCode) 

,但它給我的輸出是這樣的:

ABB12615 
ABB12715 
... 
... 
... 
.. 
. 
ABB22615 

但我希望按此順序輸出:

ABB12615 

ABB22615 

ABB12715 

是否有可能呢?

+0

是的,它是可能的,你嘗試任何事情。 – user2989408

回答

3

根據您真的要作爲排序依據

Surname, postcode, index 

這將是

ORDER BY SUBSTRING(customerCode, 1, 3), 
     SUBSTRING(customerCode, 5, 4), 
     SUBSTRING(customerCode, 4, 1) 
+0

非常聰明的想法。謝謝 –

+0

但我上次看郵政編碼是(02816)我的小鎮或5位數字。我的解決方案使用len()來獲取字符串的其餘部分。測試數據。 –

0

試試這個

SELECT * 
FROM TABLE1 
ORDER BY CASE WHEN COlumn1 = 'ABB12615' THEN 1 
       WHEN COlumn1 = 'ABB22615' THEN 2 
       WHEN COlumn1 = 'ABB12715' THEN 3 
       END 
+0

對不起,這是不可能的,因爲我只是舉了例子,但有成千上萬的顧客在那裏。 –

+0

@HakooDesai所以你試圖根據最後的數字進行排序? –

+0

不,我想根據(姓氏的前3位)+索引(如1,2,3,4,5,6..etc)+郵政編碼進行排序。請看看我的帖子。 –

0

此代碼應進行排序,你想要的方式。

-- play table 
create table #postal 
(
    id int identity(1,1) primary key, 
    code varchar(16) 
) 
go 

-- remove data 
truncate table #postal; 
go 

-- add data 
insert into #postal 
values 
('ABB12615'), 
('ABB22615'), 
('ABB12715'), 
('AAA29615'), 
('AAA19615'); 
go 

-- sort 
select 
    * 
from 
    #postal 
order by 
    substring(code, 1, 3), 
    substring(code, 5, len(code) - 5), 
    substring(code, 4, 1) 

測試運行的輸出。

enter image description here

+0

我希望按以下順序輸入o/p ID:5,4,1,2然後3 –

+0

可能已將第一張圖像放入我沒有正確訂購的第一張圖像中。稍後更新。 –

0

是其可能的預期結果。 假設您的CustomerCode格式將保持不變,您可以使用下面的代碼。 您需要根據排序索引之前字符串函數&分裂Customercode,需要將其轉換爲整數,如下圖所示:

select * from tblCustomer 
ORDER BY 
SUBSTRING(Customercode , 1, 3) --SurName 
,CONVERT(INT, SUBSTRING(Customercode , 4, 1)) --Index 
,CONVERT(INT,SUBSTRING(Customercode , 5, 5)) --Post Code; You can optionally remove the convert to int function if your post code will contain characters