SQL sum()中出现错误

SQL sum()中出现错误,sql,sql-server,Sql,Sql Server,我有一行SQL语句 SELECT No_, sum(Quantity) AS Sold, [Shipment Date] AS SoldDate, [Item Category Code], Description, [Description 2] FROM dbo.[3S Company A_S$Sales Invoice Line] WHERE [Item Category Code] = '5104' GROUP BY No_ 但是我的脚本出现了这个错误 Column 'dbo.

我有一行SQL语句

 SELECT No_, sum(Quantity) AS Sold, [Shipment Date] AS SoldDate, [Item Category Code],
 Description, [Description 2] FROM dbo.[3S Company A_S$Sales Invoice Line] 
 WHERE [Item Category Code] = '5104' GROUP BY No_
但是我的脚本出现了这个错误

Column 'dbo.3S Company A_S$Sales Invoice Line.Shipment Date' is invalid in the select
 list because it is not contained in either an aggregate function or the GROUP BY clause.

有人能帮我解释一下原因吗?

如果在查询中使用
GROUP BY
,则select列表中只允许使用分组子句中使用的列和任何聚合函数,如
SUM
。在您的情况下,您可以指定
分组方式为No
,因此这是您可以选择的唯一列,而无需使用聚合函数


如果要获取其余列,您可以选择子查询中的
No
和其他聚合列,然后通过将
No
列与子查询中的相应列相匹配来选择其他列。

该错误意味着您有一个列在分组时可能有多个值,而SQL不知道在该列中选择哪个值

您可以使用例如min()来选择最小值。像这样

 SELECT No_, 
        sum(Quantity) AS Sold, 
        min([Shipment Date]) AS SoldDate, 
        min([Item Category Code]),
        min(Description), 
        min([Description 2]) 
 FROM dbo.[3S Company A_S$Sales Invoice Line] 
 WHERE [Item Category Code] = '5104' 
 GROUP BY No_
或者阅读有关聚合函数的内容,以选择合适的函数

BWT不是MySQL而是MS SQL(MySQL不抱怨列的使用)

select子句中存在的列(聚合函数除外)也应该出现在group by子句中。这是错误消息的状态

Select Productid, Sum(Saled) from product 
Group by ProductId

在上面的示例中,ProductId位于GROUPBY子句中。因此,该查询是有效的。如果您再引入一列,该列也应位于GROUPBY子句中,以避免错误

您必须通过以下方式在组中放置不使用聚合函数的列:

GROUP BY 
    No_
    , [Shipment Date]
    , [Item Category Code]
    , Description
    , [Description 2]
试试这个

   SELECT No_, sum(Quantity) AS Sold, [Shipment Date] AS SoldDate, [Item Category Code],
   Description, [Description 2] FROM dbo.[3S Company A_S$Sales Invoice Line] 
   WHERE [Item Category Code] = '5104' GROUP BY No_,[Shipment Date],
   [ItemCategoryCode], Description,[Description 2]
在SQL中,如果您在SELECT子句中使用除AGGREGRATE函数之外的任何列名,那么您需要在GROUP中添加所有列,否则它将显示异常

如果只希望按无列求和,则必须使用aggregarte函数编写一个子查询,并将其连接到其他列,如下所示

     SELECT No_ ,quant.sold, [Shipment Date] AS SoldDate, [Item Category Code],
   Description, [Description 2] FROM dbo.[3S Company A_S$Sales Invoice Line] INV,
  (SELECT No_, sum(Quantity) AS Sold from dbo.[3S Company A_S$Sales Invoice Line] where 
    WHERE [Item Category Code] = '5104' group by No_) quant


   WHERE [Item Category Code] = '5104' and 
   inv.no_=quant.no_

假设您的表中有两行包含以下数据:No_uu=1,Quantity=10和20,Shipping Date=20140415和20140414,Item Category Code=3,Description=“bla”,Description 2=Bla2,您希望查询返回的销售日期是什么?