一尘不染

SQL按行计数的模数分组

sql

我有以下示例数据:

Id     Name     Quantity
1      Red      1
2      Red      3
3      Blue     1
4      Red      1
5      Yellow   3

因此,在此示例中,共有5个红色,1个蓝色和3个黄色。我正在寻找一种按颜色对它们进行分组的方法,但每组最多2个项目(排序并不重要)。像这样:

Name     QuantityInPackage
Red      2
Red      2
Red      1
Blue     1
Yellow   2
Yellow   1

关于如何在MS-SQL 2005上使用T-SQL完成此操作的任何建议?


阅读 194

收藏
2021-05-23

共1个答案

一尘不染

我会定义一个表包含序列号,说11000和加入该表(除非你的数据库支持生成甲骨文使用类似查询这些号码CONNECT BY):

表号

n
1
2
3
...

我使用Oracle尝试了以下查询(也应与TSQL一起使用):

With summed_colors As (
  Select name, Sum(quantity) quantity
  From colors
  Group By name
)
Select
  name,
  Case When n*2-1 = quantity Then 1 Else 2 End quantityInPackage
From summed_colors
Join nums On ( n*2-1 <= quantity )
Order By name, quantityInPackage Desc

它返回

Blue   1
Red    2
Red    2
Red    1
Yellow 2
Yellow 1
2021-05-23