SQL使用求和和和内部联接问题
当我尝试执行如下所示的查询时,会出现此错误 列“dbo.Stock\u Purchase.Supplier\u ID”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中 查询:SQL使用求和和和内部联接问题,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,当我尝试执行如下所示的查询时,会出现此错误 列“dbo.Stock\u Purchase.Supplier\u ID”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中 查询: SELECT dbo.Stock_Purchase.*, dbo.Stock_Purchase_Details.*, dbo.Supplier.*, SUM(Stock_Purchase_Details.Discount) AS totaldis FROM
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
您只能将
分组依据
中的列作为选择
中的“裸”列。因此:
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 ;
还要注意表别名如何使查询更易于读取、写入和理解
如果确实需要所有详细信息,可以使用窗口功能:
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;
错误消息说明了一切。