2013-08-09 3 views
0

Наши больничные системы имеют таблицу для документов, а страницы также перечислены отдельно. Таким образом, каждый документ/субтитр/DUID (уникальный идентификатор документа) будет указан для КАЖДОЙ страницы (стр. 1, стр. 2, стр. 3). Ниже приведен пример таблицы и то, что я пытаюсь выполнить.Поиск дубликатов многостраничных документов по отдельным идентификаторам

ID    Global_ID   document    subtitle      page DUID 
-------------- -------------------- ----------------------- ------------------------------ ------ ------------- 
1    11111    IMAGING REPORT   20120723 6400 CR    1  1.2.840..... 
2    22222222    RADIOLOGY    20110808 70012240000200 CH2V 1  1.2.840.111. 
2    22222222    RADIOLOGY    20110808 70012240000200 CH2V 1  1.2.840.222. 
3    333333    IMAGING REPORT   20120607 29006850002500 CH2V3 1  1.2.840..... 
4    44444444    RADIOLOGY    20110816 70012240000300 CH1V 1  1.2.840..... 
5    55555555    RADIOLOGY    20110817 70012240000400 CH1V 1  1.2.840..... 

Я пытаюсь найти «повторы», например, ID # 2 в примере ... где идентификатор имеет две копии (каждая со своим собственным уникальным DUID) одной и той же комбинации документов/субтитров. Имейте в виду, я ограничил приведенные выше результаты «страницей 1» ... но это прекрасно, потому что это сократит общий результирующий набор. Кроме того, имейте в виду, что субтитры для двух разных идентификаторов могут совпадать, поэтому я не могу сделать простой COUNT(subtitle) > 1 Пожалуйста, помогите мне найти дубликаты, чтобы мы могли очистить наши записи!

ответ

1

Предполагая, что SQL Server 2005+:

;WITH CTE AS 
(
    SELECT *, 
      N=COUNT(*) OVER(PARTITION BY ID, Global_ID, document, subtitle) 
    FROM YourTable 
) 
SELECT * 
FROM CTE 
WHERE N > 1 
+0

Это было бы здорово, но я «Я все еще получаю повторы нескольких страниц # – DadoFaayan

+0

@ user2460205 ну, вы сказали, что хотите найти повторы, и вот что делает этот запрос doin g – Lamak

+0

повторяет, где страница = '1' – DadoFaayan

0

Вы могли бы попробовать что-то вроде этого ...

SELECT A.ID,A.DUID,B.ID,B.DUID 
FROM <TABLE> A Join <TABLE> B 
ON A.ID=B.ID 
and A.Global_ID=B.Global_ID 
and A.document=B.document 
and A.subtitle=B.subtitle 
and A.page=B.page 
WHERE A.DUID<>B.DUID 
+0

ЭТО^Я даже не подумал об этом ... DOH! – DadoFaayan

+0

отлично! Я использую некоторую форму этого в разное время для быстрой проверки «dup», – BWS

1

Это будет работать -

 
;WITH cte AS(
    SELECT ID, Global_ID,DOCUMENT,subtitle, page, DUID, ROW_NUMBER() OVER (PARTITION BY ID, Global_ID,DOCUMENT,subtitle, page, DUID ORDER BY ID, Global_ID,DOCUMENT,subtitle, page, DUID DESC) AS row_cnt FROM table 
) 
SELECT * FROM cte WHERE row_cnt > 1