试图在SQL Server命令中限制结果

时间:2013-07-18 16:43:26

标签: asp.net sql-server sql-server-2012

<asp:SqlDataSource ID="dsSearchResults" runat="server" 
                ConnectionString="<%$ ConnectionStrings:strConn %>" 
    <SelectCommand="SELECT StoreNumber, StoreName, Address, City, State, PostalCode, Phone, Email, Latitude, Longitude, SQRT(POWER(Latitude - @Latitude, 2) + POWER(Longitude - @Longitude, 2)) * 62.1371192 AS DistanceFromAddress 
                    FROM Stores 
                    WHERE (ABS(Latitude - @Latitude) &lt; 1.75) AND (ABS(Longitude - @Longitude) &lt; 1.75) 
                    ORDER BY DistanceFromAddress">
   <SelectParameters>

我想将搜索结果限制为前5个结果。我尝试了几种不同的方法但无济于事。是的我是新手,但想学习。我正在使用SQL Server 2012。

4 个答案:

答案 0 :(得分:2)

您可以像这样更改SQL命令:

SELECT TOP 5 StoreNumber, StoreName, Address, City, 
State, PostalCode, Phone, Email, Latitude, Longitude, 
SQRT(POWER(Latitude - @Latitude, 2) 
+ POWER(Longitude - @Longitude, 2)) * 62.1371192 AS DistanceFromAddress 
FROM Stores WHERE (ABS(Latitude - @Latitude) &lt; 1.75) 
AND (ABS(Longitude - @Longitude) &lt; 1.75) 
ORDER BY DistanceFromAddress

答案 1 :(得分:1)

SQL Server使用TOP语句来限制查询结果。

在您的情况下,查询将是

SELECT TOP 5 StoreNumber, StoreName, Addres...

答案 2 :(得分:0)

尝试在查询中使用TOP:

SELECT top 5 StoreNumber, StoreName, Address, City, State, PostalCode, Phone, Email, 
Latitude, Longitude, SQRT(POWER(Latitude - @Latitude, 2) + POWER(Longitude - @Longitude, 2)) *
62.1371192 AS DistanceFromAddress FROM Stores WHERE (ABS(Latitude - @Latitude) &lt; 1.75) AND 
(ABS(Longitude - @Longitude) &lt; 1.75) ORDER BY DistanceFromAddress limit 

答案 3 :(得分:0)

SQL Server 2012 允许您在FETCH OFFSET子句中使用ORDER BY

SELECT (all your columns) 
FROM Stores 
WHERE 
     (ABS(Latitude - @Latitude) &lt; 1.75) AND (ABS(Longitude - @Longitude) &lt; 1.75) 
ORDER BY DistanceFromAddress
OFFSET 100 ROWS
FETCH NEXT 50 ROWS ONLY;

这将跳过前100行,并从那里返回50行。使用这种方法,您不仅可以选择顶部(n)行 - 而且可以选择结果集中某处的任何(n)行 - 非常适合分页将结果分别转换为(n)行的页面。 / p>

因此,如果您只想排名前5行,请使用

....
ORDER BY DistanceFromAddress
OFFSET 0 ROWS
FETCH NEXT 5 ROWS ONLY;