选择不同列的MS SQL Server时结果不同

时间:2018-07-11 09:22:02

标签: sql sql-server window-functions

我正在使用heidiSQL查询多个数据库,并且在调整SELECT子句时获得了不同的结果。

当我执行以下查询时,数据库返回501条记录:

select *
from klantcontact 
inner join (
select top 448 ks.FIRNR,ROW_NUMBER() OVER(ORDER BY FIRNR DESC) as rownum
from klant ks) res
on klantcontact.KLANR = res.FIRNR

我实际上只需要两列。但是当我运行以下查询时,我得到526条记录作为结果(仅更改了select子句):

select klantcontact.NAAM
from klantcontact 
inner join (
select top 448 ks.FIRNR,ROW_NUMBER() OVER(ORDER BY FIRNR DESC) as rownum
from klant ks) res
on klantcontact.KLANR = res.FIRNR

我认为这与“ OVER”有关?

1 个答案:

答案 0 :(得分:0)

在子查询中,您指定了top 448,但没有在末尾指定任何order by子句。因此,每次运行查询时,返回的448行都有可能不同,从而每次给出的行数都不相同。

将查询更改为以下内容之一:

select klantcontact.NAAM
from klantcontact 
inner join (
select top 448 ks.FIRNR,ROW_NUMBER() OVER(ORDER BY FIRNR DESC) as rownum
from klant ks order by ks.FIRNR) res
on klantcontact.KLANR = res.FIRNR

或删除顶部的448子句。