繁体   English   中英

MS Access:按计算字段排序(使用别名)

[英]MS Access: Order by calculated field (using alias)

在选择查询中,我使用嵌套选择计算一个字段。 我想按计算的字段(排名)对结果进行排序,但是 Access 无法识别字段排名。 (当我运行查询时,Access 要求提供 rank 的参数值。)

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

[示例查询取自这篇文章]

使用派生表

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

认为你必须:

order by ((select count(*) from tbl as tbl2 where
tbl.customers > tbl2.customers and tbl.dept = tbl2.dept) + 1)

(第 1 步)开始编写一个名为 QUERY1 的 Access 查询,其中包含作为别名的计算字段

(第 2 步)编写第二个查询 QUERY2,它使用包含您在 QUERY1 中创建的别名的子句 ORDER BY 引用 QUERY1

(第 3 步)测试它,如果它按预期工作:

(步骤 4)通过将子句“SELECT FROM QUERY1”替换为“SELECT FROM (XXXXX)”子句来修改 QUERY2,其中 XXXXX 将包含用于定义 QUERY1 的所有 sql 语句,插入到两个圆括号内。 在右括号之后,您可以保留 ORDER BY 语句引用别名字段。

那应该工作。 一般来说,这种将 sql 语句分解成 Access 查询的技术,这些查询随后作为表引用,然后由它们包含的 sql 代码替换,解决了许多复杂嵌套查询的问题。

例子:

Quer1 =" SELECT Tabella1.Descriz as description, Tabella1.V1, Tabella1.V2, Tabella1.V3, Sqr((Tabella1.[V1]-0.1)^2+(Tabella1.[V2]-0.7)^2+(Tabella1) .[V3]-0.2)^2) 作为距离 Tabella1 的距离“

Quer2 (初始版本) = "SELECT description, V1, V2, V3, distance FROM ( Quer1 ) ORDER BY distance ;"

Quer2(检查后的修改版本)= "SELECT description, V1, V2, V3, distance FROM (SELECT Tabella1.Descriz as description, Tabella1.V1, Tabella1.V2, Tabella1.V3, Sqr((Tabella1.[V1]-0.1 )^2+(Tabella1.[V2]-0.7)^2+(Tabella1.[V3]-0.2)^2) 作为距离 Tabella1 的距离 ) 按距离排序 ;"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM