我在 SQL Server 中有一个包含两个字段的表。
Total Group
35645 24
12400 55
30000 41
我想将每个组拆分为固定大小为 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
最佳答案
应该这样做:
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
(如果您已经有一个 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
关于sql-server - 如何在 SQL Server 中将数字字段拆分为更小的段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164681/