sql-server - 如何在 SQL Server 中将数字字段拆分为更小的段

标签 sql-server split group-by tile

我在 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/

相关文章:

sql-server - 将 SQL Server 2008 转换为 2000

sql - 使用拥有规则的多个分隔符(和 - )拆分 sql 中的数据

python - 创建列表后关闭文件 > text = open ("path/file.ext").read().split()

python - pandas 数据框按特定值分组

来自子查询和分组问题的 MySQL 最大值

sql-server - 如何在 NSG 中定义入站安全规则,将源定义为 Azure SQL Server

.net - 使用自动配置的localdb进行单元测试;我该如何清理?

MYSQL GROUP BY 未显示正确的日期

sql-server - SQL Server : multiple queries or UNION

Vim - 当移动到具有相同缓冲区的其他窗口时调用缓冲区事件