2014-04-15 39 views
0

我有这样的SQL线错误在SQL SUM()

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. 

任何人都可以帮我解释为什么吗?

+0

假设你有2列在表中数据如下:NO_ = 1,数量= 10和20,装运日期= 20140415和20140414,项目类别代码= 3,说明=“bla”,说明2 = Bla2,你希望你的查询返回为销售日期? – StephaneM

回答

0

试试这个

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子句中EXCEPT都汇集函数,那么你需要添加所有的列在其他组中,否则它会显示异常

如果你只想汇总NO_列然后你必须编写一个子查询与聚合函数并将其加入到你的其他列作为folows

 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_ 
1

如果在查询中使用GROUP BY,则只有您的分组子句中使用的列和SUM之类的任何聚合函数才被允许在选择列表中。在你的情况下,你指定GROUP BY No_,所以这是你可以选择而不使用聚合函数的唯一列。

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

1

的错误意味着你有分组时可能有多个值和SQL不知道在列选择

您使用cn的其中例如值的列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不抱怨列用法)

0

的列(除聚集函数)存在于select子句中也应该出现在group by子句中。这是错误信息所指出的。

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

在上例中,ProductId位于group by子句中。所以这个查询是有效的。如果您再引入一个也应该在group by子句中的列,以避免错误。

0

你必须把不使用聚合函数列在GROUP BY:

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