我对SQL Server查询有疑问
我有一个表dbo.[Files]
,其中列Id
,FileName
,FileSize(MB)
Id FileName FileSize(MB)
----------------------------
1 aa.gif 3
2 bb.gif 5
3 cc.gif 7
4 dd.gif 5
5 ee.gif 2
6 fff.gif 4
7 gg.gif 3
我的要求是,我必须以最大文件大小限制进行分组,并为文件大小小于或等于最大限制的组提供组号
假设最大文件大小总和为10
示例结果:
Id FileName FileSize(MB) GroupNo
--------------------------------------
1 aa.gif 3 1
2 bb.gif 5 1
5 ee.gif 2 1
3 cc.gif 7 2
7 gg.gif 3 2
4 dd.gif 5 3
6 fff.gif 4 3
组中FileSize的总和为10
需要最终结果
GroupNo Ids
--------------
1 1,2,5
2 4,6
3 3,7
答案 0 :(得分:1)
我尝试了很多,但最后我不得不求助于程序解决方案,尽管在T-SQL中。以下脚本适用于必须首先复制数据的临时表@t1
(列:id, fn, size, gr
)。或者,您也可以为原始表配备一个额外的组ID列gr
,然后在该表上工作。
declare @g int=1, @cnt int,@si int;
-- group-no, row-count, size of group
select @cnt=count(*) from #t1 where gr=0;
while (@cnt>0) begin
select @si=isnull(sum(size),0) from #t1 where gr=@g;
update #t1 set gr=@g where id = (
select top 1 id from #t1
where gr=0 and @si+size<=10
order by @si+size desc);
if (@@rowcount=0) begin
if (@si=0) update top(1) #t1 set gr=@g
where gr=0; -- for files > 10mb
set @g=@g+1;
end;
select @cnt=count(*) from #t1 where gr=0
end;
select * from #t1
可以在http://data.stackexchange.com/stackoverflow/query/337062/group-into-10mb-chunks-2
找到一个工作示例答案 1 :(得分:0)
请检查以下查询是否正在获取所需的输出:
Select
GroupNo,
LISTAGG((id)|| ',' ORDER BY id)
from your_table;