查找不同ID上的多页文档的副本

时间:2013-08-09 15:56:50

标签: sql sql-server count having

我们的医院系统有一个文件表,页面也单独列出。因此,每个文档/副标题/ DUID(文档唯一ID)将列在每个页面(第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 ...其中ID具有相同文档/字幕组合的两个副本(每个具有它们自己唯一的DUID)。请记住,我将上述结果限制为“第1页”......但这很好,因为这会缩短整体结果集。另外,请记住,两个不同ID的字幕可以匹配,所以我不能做一个简单的COUNT(subtitle) > 1 请帮我找到重复的内容,以便我们清理记录!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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