【问题标题】:MS Access: Order by calculated field (using alias)MS Access:按计算字段排序(使用别名)
【发布时间】:2014-04-01 10:05:45
【问题描述】:

在选择查询中,我使用嵌套选择计算字段。我想按计算字段(排名)对结果进行排序,但是 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

[示例查询取自thispost]

【问题讨论】:

  • 能不能先做子查询,再, *,再ORDER BY 1
  • 我尝试重新排列和ORDER BY 1,但这没有任何效果。

标签: sql ms-access


【解决方案1】:

使用派生表

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

【讨论】:

    【解决方案2】:

    认为你必须:

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

    【讨论】:

    • 我尝试使用 ORDER BY 的 select 语句(添加缺少的左括号),但是出现语法错误。不知道从何而来。
    【解决方案3】:

    (步骤 1)开始编写您将调用 QUERY1 的 Access 查询,其中包含作为别名的计算字段

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

    (第 3 步)测试它,如果它按要求工作:

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

    应该可以。 总的来说,这种将 sql 语句分解为 Access 查询的技术,这些查询随后被引用为表,然后被其包含的 sql 代码替换,已经解决了许多复杂的嵌套查询问题。

    示例:

    查询 1 = 选择 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 距离 FROM Tabella1 "

    Quer2(初始版本) = "选择描述,V1,V2,V3,距离 从 ( Quer1 ) 按距离排序;"

    Quer2(检查后的修改版本)= "选择描述,V1,V2,V3,距离 FROM (选择 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 距离 来自塔贝拉1) 按距离排序;"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多