2012-02-22 5 views
2

다음 형식의 SQL Server 2008 db 테이블 FILE_DETAILS 있습니다.자기 조인 및 그룹화를 사용하여 쿼리를 작성하는 방법은 무엇입니까?

ID FileName Filesize_in_MB 
-------------------------------- 
1  a.txt  5 
2  b.txt  2 
3  c.txt  2 
3  d.txt  4 
4  e.txt  6 
4  f.txt  1 
4  g.txt  2 
5  h.txt  8 
6  i.txt  7 

지금 내가 가져 할 것과 우는 소리입니다

ID가 고유 키가되었고, FILENAME가 부착 ;로 구분하고 그룹의 합계로도 FILESIZE_IN_MB 필드에 의해 취득했다 무슨 위의 결과에서
ID FileName Filesize_in_MB 
-------------------------------- 
1  a.txt    5 
2  b.txt    2 
3  c.txt;d.txt   6 
4  e.txt;f.txt;g.txt 9 
5  h.txt    8 
6  i.txt    7 

ID

groupby + 자기 조인, 하위 쿼리와 같은 다양한 조합으로 시도했지만 모두 라고 생각합니다. 무언가를 놓침.

SQL 쿼리에서이를 처리 할 수 ​​있습니까? 사전

+1

이 게시물이 http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in- ms-sql-server-2005가 도움이 될 수 있습니다. – Marco

답변

1

에서

덕분에 당신은 group by를 사용하여이 작업을 수행 할 수 있어야합니다. 집계 자로서 sum을 사용하여 집계 Filesize_IN_MB을 수행 할 수 있습니다. 그러나 FileName을 집계하려면 create an AGGREGATE in SQL SERVER 2008R2이 필요할 수 있습니다. 이렇게하면 Concatenate을 집계 함수로 사용할 수 있습니다.

select Concatenate(FileName), sum(Filesize_IN_MB) FROM FILE_DETAILS group by ID 

또 다른 방법으로 aggregate concatenation이 상당히 간단하지만 시도하지 않았습니다.

SELECT ID, 
     STUFF((SELECT ';' + [FileName] 
       FROM FILE_DETAILS 
       WHERE ID = f.ID FOR XML PATH('')), 1, 1, ''), 
     SUM(Filesize_in_MB) 
FROM FILE_DETAILS f 
GROUP BY ID 

여기에 몇 가지 추가 정보입니다 :

관련 문제