Excel和SQL排序之间的差异

时间:2010-07-21 13:47:00

标签: sql-server excel sorting

使用的程序:

  

SQL Server 2000,Excel 2003

我们的数据库中有一个名为Samples的表。使用以下查询...

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

...我们得到以下结果:

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

当用户在Excel电子表格中具有相同的数据并按Sample列排序时,他们会得到以下排序顺序:

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

出于好奇,为什么SQL和Excel中的排序之间存在差异(除了“因为它是Microsoft”)。

SQL中是否有一种方法可以在与Excel方法相同的方法中对Sample列进行排序,反之亦然?

2 个答案:

答案 0 :(得分:6)

SQL Server排序由数据库,表或字段排序规则确定。默认情况下,这是一个标准的词典字符串排序(连字符的字符代码在数字上低于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等效。

答案 1 :(得分:3)

我个人认为SQL Server排序顺序正确,我会干预Excel,因为它是遵循“不寻常”方法的那个(至少从我的经验来看)。

以下是Excel如何对字母数字数据进行排序以及如何修复它的说明:How to correctly sort alphanumeric data in Excel