2014-04-09 2 views
0

tbldoc에서 [docid]의 여러 인스턴스를 나열하려고합니다. 여기서 tbldoc. [filename]은 두 번 이상 발생하며 id는 쉼표로 구분하고 [ 파일 이름]SQL 테이블에서 중복 찾기

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]를 추가하려고 할 때 오류가 발생하는가 :

Column 'tbldoc.DocID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

이 내가 노력하고 무엇 :

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]|[instances]

12345,12346| excelfile.xls | 3

감사를 미리 도움말 사람/니네들에 대한 :

이 내가보고 싶은 출력입니다! =)

+0

어떻게'excelfile.xls'의 인스턴스가 3 개 있지만'docids'는 2 개입니까? 동일한'docid'를 가진 여러 항목이 있습니까? –

+0

이 질문은 쉼표로 구분 된 목록을 얻는 데 도움이 될 수 있습니다. http://stackoverflow.com/questions/1817985/how-do-i-create-a-comma-separated-list-using-a-sql-query –

+0

염소, 그건 단지 형식화 된 예제 일뿐입니다. 빈약 한 예제는 2 개의 인스턴스를 보여주었습니다. – lyosha

답변

0

Iyosha는

당신은의 DocID를 얻기 위해 다시 전체 테이블로 설정하여 첫 번째 결과에 가입해야합니다. 나는 입력 (typing)을 줄이기 위해 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의 링크를 따라 쉼표 목록으로 바꿀 수 있습니다.