2009-09-08 14 views
5

Mam loooooong procedura przechowywana, która uruchamia około 15 instrukcji wybranych w różnych tabelach w bazie danych - Wstawiam wszystkie wyniki wyborów do tabeli tymczasowej. Jednak - ta tabela ma kilka wierszy, które są dokładnymi duplikatami. Tymczasowa tabela wygląda tak:Wybieranie jednego wiersza ze zduplikowanych wierszy

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 

A jak chciałbym tabelę, aby spojrzeć na końcu jest tak:

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 

Jak mogę powrócić tylko jeden wiersz, jeśli istnieje wiele duplikować wiersze i nadal zwracać wiersze, które nie są duplikatami?

Odpowiedz

9
SELECT DISTINCT DocID, VisitDate, DocName 
FROM mytable 

Lub czegoś brakuje?

Aktualizacja:

Jeśli masz kontrolę nad procedury przechowywanej, można przerobić go tak, że nie ma duplikatów będzie kiedykolwiek dostać się do stołu.

Zakładając DocID jest PRIMARY KEY, zadeklarować ją jako takie w tabeli tymczasowej przy użyciu IGNORE_DUP_KEY:

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

INSERT 
INTO @mytable 
SELECT … 
FROM source_table 

To będzie pominąć duplikaty na DocID

+0

INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON) ... @ Quassnoi ta linia uratowała mnie przed błędem .. – user1947927

2

Spróbuj SELECT DISTINCT zamiast SELECT. DISTINCT słowo kluczowe usunie zduplikowaną wartość:

2

Jeśli duplikaty pochodzą z tabel źródłowych, należy wykonać WYBIERZ DISTINCT podczas wykonywania wstawiania do tabel tymczasowych.

Jeśli duplikaty przychodzą przez tabele, po prostu wykonaj WYBIERZ DISTYNT z tabeli tymczasowej po włożeniu wszystkich wierszy.

Próba usunięcia usuniętych wierszy z tabeli, która jest duplikatem jest nieco bardziej skomplikowana, ale nie wydaje się tutaj konieczna, ponieważ pracujesz z tabelą tymczasową.

0

Jeśli chcesz wyeliminować duplikaty z tabeli tymczasowej lub jeszcze lepiej, nie umieszczaj ich w tym miejscu, zamień kilka zaznaczeń w większą kwerendę związaną i wstaw ten wynik do tabeli tymczasowej.

Powiązane problemy