<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) < 1.75) AND (ABS(Longitude - @Longitude) < 1.75)
ORDER BY DistanceFromAddress">
<SelectParameters>
我想将搜索结果限制为前5个结果。我尝试了几种不同的方法但无济于事。是的我是新手,但想学习。我正在使用SQL Server 2012。
答案 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) < 1.75)
AND (ABS(Longitude - @Longitude) < 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) < 1.75) AND
(ABS(Longitude - @Longitude) < 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) < 1.75) AND (ABS(Longitude - @Longitude) < 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;