Sam*_*Sam 2 sql-server split group-by tile
我在SQL Server中有一个包含两个字段的表.
Total Group
35645 24
12400 55
30000 41
Run Code Online (Sandbox Code Playgroud)
我想将每个组拆分为固定大小为7000的较小段,每组的其余部分进入最后一段.因此,输出应如下所示.
Segment Total Group
1 7000 24
2 7000 24
3 7000 24
4 7000 24
5 7000 24
6 645 24
1 7000 55
2 5400 55
1 7000 41
2 7000 41
3 7000 41
4 7000 41
5 2000 41
Run Code Online (Sandbox Code Playgroud)
这应该这样做:
declare @t table (Total int,[Group] int)
insert into @t(Total,[Group]) values
(35645,24 ),
(12400,55 ),
(30000,41 )
;With Numbers as (
select ROW_NUMBER() OVER (ORDER BY number)-1 n
from master..spt_values
)
select
n.n+1 as Segment,
CASE WHEN (n.n+1)*7000 < t.Total THEN 7000
ELSE t.Total - (n.n*7000) END as Total,
t.[Group]
from
@t t inner join
Numbers n on n.n*7000 < t.Total
Run Code Online (Sandbox Code Playgroud)
(如果你已经有一个Numbers表,你可以删除那个部分.我spt_values只是用作一个表,我知道它有很多行,所以ROW_NUMBER()表达式应该生成所有必要的数字)
结果:
Segment Total Group
-------------------- -------------------- -----------
1 7000 24
2 7000 24
3 7000 24
4 7000 24
5 7000 24
6 645 24
1 7000 55
2 5400 55
1 7000 41
2 7000 41
3 7000 41
4 7000 41
5 2000 41
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
442 次 |
| 最近记录: |