2014-04-15 34 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]