2012-02-22 43 views
2

我有以下格式的SQL Server 2008数据库表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 
-------------------------------- 
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成为唯一的密钥和FILENAME已经得到重视和;分离,并通过组的总和还FILESIZE_IN_MBID

我尝试过各种组合,比如groupby + self join,还有子查询和所有那 但我想我遗漏了什么。

是否有可能在SQL查询中处理这个问题?

在此先感谢

+1

这篇文章http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in- ms-sql-server-2005可以帮助你。 – Marco 2012-02-22 08:28:52

回答

1

你应该能够做到这一点使用group by。汇总Filesize_IN_MB可以使用sum作为聚合器完成。但是,要汇总FileName,您可能需要create an AGGREGATE in SQL SERVER 2008R2。这将允许您使用Concatenate作为聚合功能。

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

还有另一种方式aggregate concatenation这似乎很简单,但我还没有尝试过。