Aft*_*ess 5 sql sql-server sql-server-2005
这是我的数据:
item_ID | group_ID | count_of_items_in_group
2|ABC|3
5|ABC|3
9|ABC|3
29|DEF|3
3|DEF|3
4|DEF|3
200|XYZ|2
300|XYZ|2
600|GHI|1
Run Code Online (Sandbox Code Playgroud)
SQL Filddle: http ://sqlfiddle.com/#!2/dfe09/1
对于每个组,我想限制返回的item_ID的数量最多为2.我不关心返回哪两个.如果组少于2行,则只返回1行.
我不能为每个组写一个select top*2并且联合选择因为我有几百个组.
我不知道从哪里开始,非常感谢你的帮助.
使用MS SQL 2005
(表格布局与示例中的完全一样,它是基于多个查询的视图)
使用此ROW_NUMBER()功能:
SELECT *
FROM (select *,ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY item_id) as RowRank
from items_in_groups
)sub
WHERE RowRank <=2
Run Code Online (Sandbox Code Playgroud)
演示:SQL小提琴
该 ROW_NUMBER() 函数为每一行分配一个数字. PARTITION BY 是可选的,但用于为该组中的每个值开始编号,即:如果您PARTITION BY group_id 然后为每个唯一group_id值编号将从1开始 ORDER BY,当然用于定义计数应该如何,并且在该ROW_NUMBER()功能.
如何使用ROW_NUMBER() 枚举数据集的字段数(按每个 group_id 进行分区)。
然后返回什么时候刚好小于或等于 2?或您想要的任何数字
SELECT * FROM
(
select item_id, group_id, count_of_items,
ROW_NUMBER() OVER(PARTITION BY group_id ORDER BY count_of_items DESC)
AS RN
from items_in_groups
) A
WHERE RN <= 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2088 次 |
| 最近记录: |