简体   繁体   中英

SQL using SUM and INNER JOIN issue

I get this error when I try to execute the query shown below

Column 'dbo.Stock_Purchase.Supplier_ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Query:

SELECT  
    dbo.Stock_Purchase.*, dbo.Stock_Purchase_Details.*, 
    dbo.Supplier.*,
    SUM(Stock_Purchase_Details.Discount) AS totaldis
FROM    
    dbo.Stock_Purchase 
INNER JOIN
    dbo.Stock_Purchase_Details ON dbo.Stock_Purchase.Purchase_ID = dbo.Stock_Purchase_Details.Purchase_ID 
INNER JOIN
    dbo.Supplier ON dbo.Stock_Purchase.Supplier_ID = dbo.Supplier.Supplier_ID 
GROUP BY
    Stock_Purchase.Purchase_ID 

You can only include the column in the GROUP BY as a "bare" column in the SELECT . So:

SELECT p.Purchase_ID, sum(pd.Discount) as totaldis
FROM dbo.Stock_Purchase p INNER JOIN
     dbo.Stock_Purchase_Details pd
     ON p.Purchase_ID = pd.Purchase_ID INNER JOIN
     dbo.Supplier s
     ON p.Supplier_ID = s.Supplier_ID
GROUP BY p.Purchase_ID ;

Also notice how table aliases make the query easier to read, write, and understand.

If you do want all the details, you can use window functions:

SELECT p.*, pd.*, s.*,
       SUM(pd.Discount) OVER (PARTITION BY p.Purchase_ID) as totaldis
FROM dbo.Stock_Purchase p INNER JOIN
     dbo.Stock_Purchase_Details pd
     ON p.Purchase_ID = pd.Purchase_ID INNER JOIN
     dbo.Supplier s
     ON p.Supplier_ID = s.Supplier_ID;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM