在选择查询中,我使用嵌套选择计算字段。我想按计算字段(排名)排序结果,但Access无法识别字段排名。 (当我运行查询时,Access会询问排名的参数值。)
SELECT
*,
(select count(*)
from tbl as tbl2
where tbl.customers > tbl2.customers and tbl.dept = tbl2.dept
) + 1 as rank
FROM tbl
ORDER BY rank
[示例查询来自this帖子]
答案 0 :(得分:4)
使用派生表
SELECT * FROM
(
SELECT
*,
(select count(*)
from tbl as tbl2
where tbl.customers > tbl2.customers and tbl.dept = tbl2.dept
) + 1 as rank
FROM tbl
) as newtbl
ORDER BY rank
答案 1 :(得分:0)
认为你必须:
order by ((select count(*) from tbl as tbl2 where
tbl.customers > tbl2.customers and tbl.dept = tbl2.dept) + 1)
答案 2 :(得分:0)
(步骤1)开始编写一个访问查询,您将调用QUERY1,其中包含计算出的字段作为别名
(第2步)编写第二个查询QUERY2,该查询引用带有子句ORDER BY的QUERY1,该子句包含您在QUERY1中创建的别名。
(第3步)对其进行测试,以及它是否按预期工作:
(步骤4)通过将子句“ SELECT FROM QUERY1”替换为子句“ SELECT FROM(XXXXX)”来修改QUERY2,其中XXXXX将包含用于定义QUERY1的所有sql语句,该语句插入两个圆括号内。在右括号后,您可以保留引用别名字段的ORDER BY语句。
应该可以。 一般来说,这种将sql语句分解为Access查询的技术,随后将其引用为表,然后用其包含的sql代码替换,从而解决了许多复杂的嵌套查询问题。
示例:
Quer1 =“ 选择Tabella1.Descriz作为描述,Tabella1.V1,Tabella1.V2,Tabella1.V3,Sqr((Tabella1。[V1] -0.1)^ 2 +(Tabella1。[V2] -0.7)^ 2 +(Tabella1。[V3 ] -0.2)^ 2)AS距离 来自Tabella1“
Quer2(初始版本) =“选择描述,V1,V2,V3,距离 来自( Quer1)ORDER BY distance;“
Quer2(检查后的修改版本)= “选择描述,V1,V2,V3,距离 从(选择Tabella1.Descriz作为描述,Tabella1.V1,Tabella1.V2,Tabella1.V3,Sqr((Tabella1。[V1] -0.1)^ 2 +(Tabella1。[V2] -0.7)^ 2 +(Tabella1。 [V3] -0.2)^ 2)AS距离 来自Tabella1) ORDER BY distance;“