假设我有一个包含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
这个例子没什么区别,我只是想知道这是否可能。
答案 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