Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中使用group by子句时发生聚合函数错误_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

在SQL中使用group by子句时发生聚合函数错误

在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”

我有一张名为purchase的桌子。它有billno、billdate、qty、amount列。当我运行GROUPBY查询时,它抛出了一个错误

我使用的查询

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,您需要对其进行聚合。有关更具体的帮助,请提供示例数据和预期输出。