2010-07-21 58 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