• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

获得前N行与在SQL Server 4列

sql 来源:HelloMasters 3次浏览

假设我有4个列的表格:获得前N行与在SQL Server 4列

Col1 Col2 Col3 Col4 

我的初始查询是:

SELECT Col1, Col2, Col3, Col4 
FROM myTable 
ORDER BY Col1, Col2, Col3 DESC, Col4 

我期望的结果是所有4列,但与此条件,顶部N Col3不同的行当Col1,Col2是相等的。

实施例具有N = 2:

表的示例数据:

Col1 Col2 Col3 Col4 
--------------------- 
1 a 2000 s 
1 a 2002 c 
1 a 2001 b 
2 b 1998 s 
2 b 2002 c 
2 b 2000 b 
3 c 2000 b 
1 f 1998 n 
1 g 1999 e 

期望的结果:

1 a 2002 c 
1 a 2001 b 
1 f 1998 n 
1 g 1999 e 
2 b 2002 c 
2 b 2000 b 
3 c 2000 b 

在另一个说明中,当(col1, col2)在多个记录被重复,只是出口顶当按Col3降序排序时,这些记录有N行。

我可以用SQL脚本来做到这一点吗,不用硬编码?


===========解决方案如下:

declare @t table (Col1 int, Col2 char, Col3 int, Col4 char); 

insert into @t values 
(1, 'a', 2000, 's'), 
(1, 'a', 2002, 'c'), 
(1, 'a', 2001, 'b'), 
(2, 'b', 1998, 's'), 
(2, 'b', 2002, 'c'), 
(2, 'b', 2000, 'b'), 
(3, 'c', 2000, 'b'), 
(1, 'f', 1998, 'n'), 
(1, 'g', 1999, 'e'); 


declare @N int = 2; -- number per "top" 

with cte as 
(
select *, 
     row_number() over(partition by col1, col2 order by col3 desc) as rn 
from @t 
) 

select * 
from cte c 
where rn <= @N; 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)