我有一个名为purchase
的表。它具有列billno, billdate, qty, amount
。当我运行group by
查询时,它抛出错误。
我使用的查询
SELECT
BILLNO,
BILLDATE,
SUM(QTY) AS SUMQTY,
SUM(AMOUNT) AS SUMAMOUNT
FROM
PURCHASE
GROUP BY
BILLNO
这是我遇到的错误-如何获取账单总额?
选择列表中的“ PURCHASE.BILLDATE”列无效,因为它既不包含在聚合函数中也不在GROUP BY子句中。
答案 0 :(得分:1)
错误非常明显。聚集查询的SELECT
中未聚集的列需要匹配键。在您的查询中,BILLDATE
未聚合,也不是键。
简单的解决方法是:
SELECT BILLNO, BILLDATE,
SUM(QTY) AS SUMQTY,
SUM(AMOUNT) AS SUMAMOUNT
FROM PURCHASE
GROUP BY BILLNO, BILLDATE;
如果每个BILLNO
只需要一行-或者如果您知道BILLDATE
对于所有BILLNO
都是相同的–那么可以改用聚合函数:>
SELECT BILLNO, MAX(BILLDATE) as BILLDATE,
SUM(QTY) AS SUMQTY,
SUM(AMOUNT) AS SUMAMOUNT
FROM PURCHASE
GROUP BY BILLNO;
答案 1 :(得分:0)
根据官方文档,‘该列必须出现在SELECT语句的FROM子句中,但不要求出现在SELECT列表中。但是,列表中任何非聚合表达式中的每个表或视图列都必须包含在GROUP BY列表中,这将指示您的错误原因。
有关更多详细信息,您可以参考此链接,您将看到有关您的问题的一些示例:https://docs.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-2017#arguments
答案 2 :(得分:0)
在这里,我们必须修改在SQL查询中使用分组依据和排序依据的概念。
请记住,排序依据中的列名称不能在汇总函数(例如SUM,Average或MAX)中使用。
因此,请勿在“聚合函数”中以及“排序依据”中输入相同的列名。