在SQL中使用group by子句时发生聚合函数错误
我有一张名为purchase的桌子。它有billno、billdate、qty、amount列。当我运行GROUPBY查询时,它抛出了一个错误 我使用的查询在SQL中使用group by子句时发生聚合函数错误,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张名为purchase的桌子。它有billno、billdate、qty、amount列。当我运行GROUPBY查询时,它抛出了一个错误 我使用的查询 SELECT BILLNO, BILLDATE, SUM(QTY) AS SUMQTY, SUM(AMOUNT) AS SUMAMOUNT FROM PURCHASE GROUP BY BILLNO 这就是我得到的错误-如何获得账单明智的总金额 列“PURCHASE.BILLDATE”
SELECT
BILLNO,
BILLDATE,
SUM(QTY) AS SUMQTY,
SUM(AMOUNT) AS SUMAMOUNT
FROM
PURCHASE
GROUP BY
BILLNO
这就是我得到的错误-如何获得账单明智的总金额
列“PURCHASE.BILLDATE”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中
这个错误很明显。聚合查询的SELECT中的未聚合列需要与键匹配。在查询中,BILLDATE不是聚合的,也不是键 简单的解决方法是:
SELECT BILLNO, BILLDATE,
SUM(QTY) AS SUMQTY,
SUM(AMOUNT) AS SUMAMOUNT
FROM PURCHASE
GROUP BY BILLNO, BILLDATE;
如果每个BILLNO只需要一行,或者如果您知道所有BILLNO的BILLDATE都相同,则可以使用聚合函数:
SELECT BILLNO, MAX(BILLDATE) as BILLDATE,
SUM(QTY) AS SUMQTY,
SUM(AMOUNT) AS SUMAMOUNT
FROM PURCHASE
GROUP BY BILLNO;
根据官方文件,“该列必须出现在SELECT语句的FROM子句中,但不要求出现在SELECT列表中。”。但是,列表中任何非聚集表达式中的每个表或视图列都必须包含在GROUP BY list'中,它将指示错误的原因 有关更多详细信息,请参阅此链接,您将看到有关您的问题的一些示例:
有一个很好的例子可以解释:这里我们必须修改在SQL查询中使用Group By和Order By的概念 请记住,排序依据的列的名称不能在聚合函数(如SUM、Average或MAX)中使用
因此,不要在聚合函数和Order By中使用相同的列名。billdate列必须是聚合总和、最大值等,或者包含在group By子句中。如果我将billdate列包含在group By中,则无法获得所需的结果@tarheelThen,您需要对其进行聚合。有关更具体的帮助,请提供示例数据和预期输出。