我真的很困惑参数如何在Microsoft Access中工作。我知道参数应该用于允许用户在运行查询时键入值 - 而不必修改每个实例的查询。
所以,让我们使用以下示例。
SELECT countyTable.countyName, Sqr((69.1*(46.47-avgLatitude))^2+(69.1*(-90.17-avgLongitude)*Cos(avgLatitude/57.3))^2) as Distance
FROM countyTable
WHERE ((([avgLatitude]-5)<46.47) AND (([avgLatitude]+5)>46.47) AND (([avgLongitude]-5)<-90.17) AND (([avgLongitude]+5)>-90.17))
ORDER BY Sqr((69.1*(46.47-avgLatitude))^2+(69.1*(-90.17-avgLongitude)*Cos(avgLatitude/57.3))^2), countyTable.countyName
1)我正在选择包含SQR功能的列。我还将该列命名为“距离”。但是,当我尝试在所述列上进行ORDER BY时 - 并将其称为“距离” - 它要求输入值而不是对该列进行排序。我可以获得ORDER BY查询的唯一方法是从SELECT行复制表达式。这似乎没必要。
2)现在,我有一些硬编码的值。我可能不太关心值'57 .3'和'69 .1'然而,对于'46 .47'我想用'x2'和-90.17代替'Y2'。我一直试图用参数写这个,Access要求'x2'和'y2'的每个实例的值。这对我没有任何帮助,所以我把它们硬编码了。
有任何帮助吗?谢谢!
答案 0 :(得分:2)
1)我正在选择包含SQR功能的列。我还将该列命名为“距离”。但是,当我尝试在所述列上进行ORDER BY时 - 并将其称为“距离” - 它要求输入值而不是对该列进行排序。我可以获得ORDER BY查询的唯一方法是从SELECT行复制表达式。这似乎没必要。
是Access做得不好。现在,每个真正的DBMS都支持通过SELECT子句中创建的列别名进行排序。要在Access中执行此操作,您可以执行您正在执行的操作(重复表达式)或对其进行子查询,例如。
select a,b,c
from (
select a, b, a+b as C
from sometable
) AS SUBQUERIED
order by c
2)我一直试图用参数写这个,Access询问每个'x2'和'y2'实例的值。
你做错了。访问权限应仅提示一次。如果您有这样的查询
select a, b, a+b as C
from sometable
where a > [x] and y > [x]
它会看到两个[x]是相同的 - 并且两个都只有一个提示。只需确保 拼写完全相同。
答案 1 :(得分:1)
如果您想要这样的简化示例:
SELECT
countyTable.countyName,
Sqr((69.1*(46.47-avgLatitude))^2+(69.1*(-90.17-avgLongitude)*Cos(avgLatitude/57.3))^2) as Distance
FROM countyTable
ORDER BY Distance;
对于ORDER BY,您可以通过字段列表中的序号位置引用该复杂的距离表达式。
SELECT
countyTable.countyName,
Sqr((69.1*(46.47-avgLatitude))^2+(69.1*(-90.17-avgLongitude)*Cos(avgLatitude/57.3))^2) as Distance
FROM countyTable
ORDER BY 2;
至少从Jet 4(Access 2000)以及较新的ACE数据库引擎支持该方法。