我有以下格式的sql server 2008 db table 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_MB
和ID
字段分隔{{1}} }
我试过各种组合,比如groupby + self join,sub sub queries等等 但我想我错过了一些东西。
是否可以在SQL查询中处理此问题?
提前致谢
答案 0 :(得分:4)
试试这个:
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
答案 1 :(得分: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的另一种方式似乎相当简单,但我还没试过。