2009-09-08 99 views
5

我有一个loooooong存储过程,它在数据库的不同表中运行大约15个select语句 - 我将选择的所有结果都插入临时表中。但是 - 该表有一些行是完全重复的。该临时表看起来是这样的:从重复的行中选择一行

DocID | VisitDate   | DocName 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
646681 | 8/26/2009 1:07:01 PM | Doc3  
263272 | 8/26/2009 1:07:01 PM | Doc4 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
1903875 | 8/26/2009 1:07:01 PM | Doc7 

而且我想如何表看看到底是这样的:

DocID | VisitDate   | DocName 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
646681 | 8/26/2009 1:07:01 PM | Doc3  
263272 | 8/26/2009 1:07:01 PM | Doc4 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
1903875 | 8/26/2009 1:07:01 PM | Doc7 

我怎么能只返回一行,如果有多个重复的行并仍然返回不重复的行?

回答

9
SELECT DISTINCT DocID, VisitDate, DocName 
FROM mytable 

或者我错过了什么?

更新:

如果在存储过程的控制,你可以重写它,以便没有重复将永远进入表。

假设DocIDPRIMARY KEY,其声明为例如在使用IGNORE_DUP_KEY临时表:

DECLARE @temp TABLE (DocId INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON), …) 

INSERT 
INTO @mytable 
SELECT … 
FROM source_table 

这将跳过DocID

+0

INT NOT NULL PRIMARY KEY WITH(IGNORE_DUP_KEY = ON)... @ Quassnoi此行将我从错误中拯救出来.. – user1947927 2013-01-23 10:27:46

2

重复尝试SELECT DISTINCT代替SELECTDISTINCT关键字将删除重复值

2

如果重复项来自源表,则在对临时表执行插入操作时执行SELECT DISTINCT。

如果重复的数据来自表中的,则只需在插入所有行后从临时表中执行SELECT DISTINCT即可。

尝试实际上删除表中重复的行涉及多一点,但在这里似乎并不必要,因为您正在使用临时表。

0

如果您想从临时表中删除重复项或更好,请不要将它们放在第一位,将多个选择转换为更大的联合查询并将该结果插入临时表。