2009-09-08 47 views
5

Tôi có một thủ tục được lưu trữ loooooong chạy khoảng 15 câu lệnh chọn trên các bảng khác nhau trong cơ sở dữ liệu - tôi chèn tất cả kết quả của các lựa chọn vào bảng tạm thời. Tuy nhiên - bảng đó có một số hàng trùng lặp chính xác. Bảng tạm thời trông giống như sau:Chọn một hàng từ hàng trùng lặp

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 

Và làm thế nào tôi muốn bảng để nhìn cuối cùng là như thế này:

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 

Làm thế nào tôi có thể trở lại chỉ ONE hàng nếu có nhiều hàng trùng lặp và vẫn trả về các hàng không trùng lặp?

Trả lời

9
SELECT DISTINCT DocID, VisitDate, DocName 
FROM mytable 

Hoặc tôi đang thiếu gì đó?

Cập nhật:

Nếu bạn có quyền kiểm soát các thủ tục lưu trữ, bạn có thể viết lại nó để không có bản sao sẽ không bao giờ có được vào bảng.

Giả sử DocID là một PRIMARY KEY, khai báo nó như vậy trong bảng tạm thời sử dụng IGNORE_DUP_KEY:

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

INSERT 
INTO @mytable 
SELECT … 
FROM source_table 

này sẽ bỏ qua bản sao trên DocID

+0

INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON) ... @ Quassnoi dòng này đã cứu tôi khỏi một sai lầm .. – user1947927

2

Hãy thử SELECT DISTINCT thay vì SELECT. DISTINCT từ khóa sẽ xóa giá trị trùng lặp

2

Nếu các từ khóa trùng lặp đến từ các bảng nguồn, sau đó thực hiện CHỌN CHỌN CHỌN khi bạn thực hiện chèn vào bảng tạm thời của mình.

Nếu trùng lặp đến trên bảng, sau đó chỉ cần thực hiện CHỌN CHỌN từ bảng tạm thời của bạn sau khi bạn đã chèn tất cả các hàng.

Cố gắng thực sự xóa các hàng khỏi bảng trùng lặp có liên quan nhiều hơn một chút, nhưng dường như không cần thiết ở đây, bởi vì bạn đang làm việc với bảng tạm thời.

0

Nếu bạn muốn loại bỏ các bản sao từ bảng tạm thời hoặc tốt hơn, không đặt chúng ở đó ở vị trí đầu tiên, chuyển bạn nhiều lựa chọn thành truy vấn công đoàn lớn hơn và chèn kết quả đó vào bảng tạm thời của bạn.

Các vấn đề liên quan