SQL选择动态记录数
使用SQLServer2005,我试图根据另一个表从一个表中动态选择一定数量的记录,以获得该数量的记录所需的数据 表1有一个类别ID和我希望为该类别返回的记录数SQL选择动态记录数,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,使用SQLServer2005,我试图根据另一个表从一个表中动态选择一定数量的记录,以获得该数量的记录所需的数据 表1有一个类别ID和我希望为该类别返回的记录数 Category ID TOP_Limit ---------------------- Cat 1 1 Cat 2 2 Cat 3 10 表2包含产品ID、类别ID和数量: Product ID Category ID Quantity ----------------------
Category ID TOP_Limit
----------------------
Cat 1 1
Cat 2 2
Cat 3 10
表2包含产品ID、类别ID和数量:
Product ID Category ID Quantity
---------------------------------
Part 1 Cat 1 10
Part 2 Cat 1 20
Part 3 Cat 2 100
Part 4 Cat 2 100
Part 5 Cat 2 50
Part 6 Cat 3 5
我如何编写一个查询,从表2第2部分、第3部分和第4部分、第6部分中获得正确的顶级产品记录?我想这样就可以了
declare @Table1 table (
Cat int,
TOP_Limit int
)
declare @Table2 table (
Part int,
Cat int,
Quantity int
)
insert into @Table1
(Cat, TOP_Limit)
select 1,1 union all
select 2,2 union all
select 3,10
insert into @Table2
(Part, Cat, Quantity)
select 2,1,20 union all
select 3,2,100 union all
select 4,2,100 union all
select 5,2,50 union all
select 6,3,5
;with cteRowNums as (
select t2.Part, t2.Cat, t2.Quantity,
ROW_NUMBER() over(partition by t2.Cat order by t2.Quantity desc, t2.Part) as rownum
from @Table2 t2
inner join @Table1 t1
on t2.Cat = t1.Cat
)
select c.Part, c.Cat, c.Quantity
from cteRowNums c
inner join @Table1 t1
on c.Cat = t1.Cat
and c.rownum <= t1.TOP_Limit
试着这样做:
;with cte as (
select ProductID, CategoryID, Quantity,
[row] = row_number() over(partition by CategoryID order by Quantity desc)
from Table2
)
select t2.Product, t2.CategoryID, t2.Quantity
from cte t2
join Table1 t1 on t2.CategoryID=t1.CategoryID
where t2.row <= t1.TOP_Limit
嘿,太棒了,谢谢!!!我试图弄清楚如何使用排号,但我从未见过超额分配。。。之前