使用不同时按"original order"排序



我有下表:

CREATE TABLE [dbo].[TableB](
    [id] [int] NULL,
    [FileName] [varchar](20) NULL
)
INSERT INTO [TableB] ([id],[FileName])VALUES(1,'File2')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
INSERT INTO [TableB] ([id],[FileName])VALUES(2,'File1')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
INSERT INTO [TableB] ([id],[FileName])VALUES(3,'File1')

当我做一个简单的SELECT时,它会给出以下结果:

id          FileName            
----------- --------------------
          1 File2               
          2 File1               
          3 File1  

但是,当我添加DISTINCT时,它给出:

FileName            
--------------------
File1               
File2

我不需要排序,我需要如下结果:

FileName            
--------------------
File2               
File1

我正在研究SQL Server 2008。我想保持结果的原始顺序。

假设您希望结果按每个FileName记录的第一个id排序,请尝试:

select FileName
from TableB
group by FileName
order by min(id)

事实是您不知道数据库中元组的顺序。您可以重新登录,它们将以另一种方式订购。这就是为什么没有original order这样的东西。

正如Andrew所回答的,行排序是在内部完成的,我们无法控制它。因此,对于您的问题,我建议添加一个类似"timestamp"的列,以保持行插入的时间戳。

在实践中,当您使用DISTINCT时,数据库引擎需要使用一种算法来消除重复。它可以通过将元素插入到等效的std::set(C++)中来实现。它只能通过散列函数来完成。

请记住,关系数据库中的表是没有自然顺序的行的集合。如果你想在你的行中有一个自然的顺序,你必须给它们一个序列号或id,并且在查询中总是使用ORDER BY

如果您"需要"特定顺序的结果,那么您应该在order BY子句中声明该顺序。

SELECT FileName
FROM mytable
ORDER BY FileName Desc

最新更新