2010-07-21 53 views
3

程序:使用排序

的SQL Server 2000,Excel 2003中

我們已經在我們的數據庫稱爲樣品表。使用下面的查詢......

SELECT [Sample], [Flag] FROM Samples 
ORDER BY [Sample] 

...我們得到如下結果:

Sample Flag 
---------- ---- 
12-ABC-345  1 
123-45-AB  0 
679-ADC-12  1 

當用戶在Excel電子表格中相同的數據,並通過樣品列排序,他們得到如下排序:

Sample Flag 
---------- ---- 
123-45-AB  0 
12-ABC-345  1 
679-ADC-12  1 

出於好奇,爲什麼會出現那種在SQL和Excel之間的差異(比其他「因爲它是微軟」)。

是否有SQL的方式進行排序的方法同樣的表格法,反之亦然樣品柱?

回答

6

在SQL服務器排序是由數據庫,表或字段的排序規則來確定。默認情況下,這是一個標準的詞典字符串排序(連字符的字符代碼在數字上低於1的字符代碼)。不幸的是,根據this Microsoft link時,Excel 排序時,除了領帶破忽略連字符和撇號。沒有專門的(我知道的)這樣做的整理,所以你不得不僞造它。

爲了實現在SQL Server相同的結果,你需要做的:

SELECT [Sample], [Flag] FROM Samples 
ORDER BY REPLACE(REPLACE([Sample], '-', ''), '''', ''), 
    (CASE WHEN CHARINDEX([Sample], '-') > 0 THEN 1 ELSE 0 END) + 
    (CASE WHEN CHARINDEX([Sample], '''') > 0 THEN 1 ELSE 0 END) ASC 

這會對該字符串的結果,就好像這一切都是連字符和撇號的一個計算值去掉,然後訂單將產生1爲包含一個連字符既包含任何值撇號,或2(和0爲既不包含的值)的任何值。該表達式將導致任何包含連字符和/或撇號的值在Excel中相同的表達式之後進行排序。

+0

迷人的東西,感謝您的快速答案! – LittleBobbyTables 2010-07-21 14:07:32

3

我個人認爲SQL Server的排序順序是否正確,我會干預的Excel,因爲它是一個跟隨一個「不尋常」的方法(至少從我的經驗)。

下面是Excel如何排序字母數字數據,以及如何解決它的解釋:How to correctly sort alphanumeric data in Excel