访问获取顶行和最后一行

时间:2014-11-20 16:02:01

标签: ms-access ms-access-2010

假设我有一个包含CName,Amount1,Amount2列的表CData。 现在我想使用一个查询来计算每个不同CName的Amount1和Amount2之间的差异,并且作为查询的结果,获得具有最大差异的~1000行和具有最小差异的1000行(或最负面的) ) 区别。如果结果在一个或两个表中,则无关紧要。

1)我知道函数TOP,因此我可以通过两个查询执行此操作并按差异排序(一旦升序,一旦降序)。有没有办法在一个查询中执行此操作?这样可以节省一些时间。

2)一般问题:当我在查询中定义一个字段时(在这个例子中为“差异”),我可以以某种方式使用它,例如,按它对数据进行排序吗?像这样(好吧,它不起作用,但让你知道我的意思):

SELECT CData.CName, CData.Amount2-CData.Amount1 AS Difference
FROM CData
GROUP BY CData.CName
ORDER BY Difference

或者我是否总是要做以下事情:

...
 ORDER BY CData.Amount2-CData.Amount1

这个例子没什么区别,我只是想知道这是否可能。

2 个答案:

答案 0 :(得分:0)

你想为你的差异进行汇总functino?平均?总和?

SELECT CName, avg(Amount2-Amount1) AS Difference
FROM CData
GROUP BY CName

顺便说一句,要在'one'查询中执行,您可以在两个子查询上使用联合查询,一个使用TOP 1000 asc,一个使用TOP 1000 desc

看起来Access不允许您在ORDER BY子句中使用别名,如果使用QBE网格,您可以将格式从UI更改为SQL,并在{{1}中重复计算}子句。


嗨,约翰。 查看the SO tour以获取有关如何使用格式代码等选项的说明。

不确定这是否适合您,但您可以尝试以下方式:

ORDER BY

答案 1 :(得分:0)

第一次排序ASC(升序),第二次排序DESC(降序)

SELECT TOP 1000 
    CData.CName, 
    CData.Amount2 - CData.Amount1 AS Difference
FROM CData
GROUP BY CData.CName
ORDER BY CData.Amount2 - CData.Amount1 ASC

SELECT TOP 1000 
    CData.CName, 
    CData.Amount2 - CData.Amount1 AS Difference
FROM CData
GROUP BY CData.CName
ORDER BY CData.Amount2 - CData.Amount1 DESC