我有以下示例数据:
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 完成此操作的任何建议?
最佳答案
我会定义一个包含序列号的表,比如 1
至 1000
并加入该表(除非您的数据库支持使用 CONNECT BY
在像 Oracle 一样的查询中生成这些数字):
表号
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
关于SQL Group by Modulo of Row Count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561585/