Sql 按“排序”;“原始订单”;使用DISTINCT时

Sql 按“排序”;“原始订单”;使用DISTINCT时,sql,sql-server-2008,sorting,distinct,Sql,Sql Server 2008,Sorting,Distinct,我有下表: CREATE TABLE [dbo].[TableB]( [id] [int] NULL, [FileName] [varchar](20) NULL ) INSERT INTO [TableB] ([id],[FileName])VALUES(1,'File2')

我有下表:

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')
当我做一个简单的
选择时,它会给出以下结果:

id          FileName            
----------- --------------------
          1 File2               
          2 File1               
          3 File1  
但是,当我添加
DISTINCT
时,它给出:

FileName            
--------------------
File1               
File2
我不需要排序,我需要的结果如下:

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

我正在使用SQLServer2008。我想保持结果的原始顺序。

事实上,您不知道数据库中元组的顺序。您可以重新登录,它们将以另一种方式订购。这就是为什么没有原始顺序的原因,正如Andrew回答的,行顺序是在内部完成的,我们无法控制它。因此,对于您的问题,我建议添加一个类似“timestamp”的列,它保留行插入的时间戳。

如果您“需要”特定顺序的结果,那么您应该在ORDERBY子句中声明该顺序


实际上,当您使用
DISTINCT
时,数据库引擎需要使用算法来消除重复项。它可以通过将元素插入到等价的
std::set
(C++)中来实现。它只能通过哈希函数完成


请记住,关系数据库中的表是没有自然顺序的行的集合。如果您希望在行中按自然顺序排列,则必须给行指定一个序列号或id,并在查询中始终使用
order BY

假设您希望按每个文件名记录的第一个id对结果进行排序,请尝试:

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

出于好奇,
order by id
order by min(id)
在这种情况下有什么区别?
min(id)
是组内
id
的最小值<代码>按id排序
在未按
id
分组的分组查询中不是有效的排序顺序,因为返回的每一行可能有多个
id
值;无法确定应使用哪个值进行排序。感谢您的澄清:)
select FileName
from TableB
group by FileName
order by min(id)