我正在使用SQL Server2008R2。我有以下SQL select语句:
TOP 5
让我们说上面的select语句返回1001条记录。
让它返回select top 5 column1, max(column2), min(column3)
from myTable
group by column1
order by column1
并不难:
1001 column1 max(column2) min(column3) -- top#1 row data
1001 column2 max(column2) min(column3) -- top#2 row data
1001 column1 max(column2) min(column3) -- top#3 row data
1001 column2 max(column2) min(column3) -- top#4 row data
1001 column2 max(column2) min(column3) -- top#5 row data
如何修改上述声明,以便1001也会返回,因此我知道总共有多少条记录? 我想要一些像这样的结果:
{{1}}
1001是可用记录的总数,我只选择前5个。我想知道前5名的总数和细节。
答案 0 :(得分:7)
一种方法是使用子查询:
select top 5 *
from (select count(*) over () as cnt, column1, max(column2), min(column3)
from myTable
group by column1
) t
order by column1;
虽然我更喜欢子查询来防止歧义,但它也可以在没有子查询的情况下工作:
select top 5 count(*) over () as cnt, column1, max(column2), min(column3)
from myTable
group by column1
order by column1;
答案 1 :(得分:6)
您可以使用def number ():
x = [1,2,3,4...
窗口功能..
count() over()