在SQL表中查找重复项,列出多个实例

时间:2014-04-09 21:32:26

标签: sql sql-server

我试图列出tbldoc的多个实例。[docid]来自tbldoc,其中tbldoc。[filename]不止一次出现,id就像它们用逗号分隔并按[filename]分组

this code works great to find duplicates:
SELECT cast([filename] as varchar(max)),  
 COUNT(cast([filename] as varchar(max))) 
FROM tbldoc
GROUP BY cast([filename] as varchar(max))
HAVING ( COUNT(cast([filename] as varchar(max))) > 1 )

但是当我尝试添加[docid]时出现错误:

  

专栏' tbldoc.DocID'在选择列表中无效,因为它不是   包含在聚合函数或GROUP BY子句中。

这就是我想要的:

SELECT [docid], cast([filename] as varchar(max)),  
 COUNT(cast([filename] as varchar(max))) 
FROM tbldoc
GROUP BY cast([filename] as varchar(max))
HAVING ( COUNT(cast([filename] as varchar(max))) > 1 )

我不知道如何让所有[docid]列表以逗号分隔,我在sql方面是一个非常新的用户。

这是我想看到的输出:

  

[docids] | [filemame] | [实例]

     

12345,12346 | excelfile.xls | 3

提前感谢帮助人/女孩! =)

1 个答案:

答案 0 :(得分:0)

Iyosha,

您需要将第一个结果集重新加入全表以获取DocID。我将CAST()作为读取来保存一些输入。

;with CountedFiles as
(
    SELECT
        filename,  
        COUNT(filename) as Total
    FROM tbldoc
    GROUP BY filename
    HAVING COUNT(filename) > 1
)
select
    cf.filename,
    cf.Total,
    td.DocID
from CountedFiles as cf
inner join tbldoc at td
    on td.filename = cf.filename;

这将返回一个DocId,一个文件名和每行的计数。然后,您可以按照Adam的链接将其转换为逗号列表。