SQL鲜明的总和

问题描述:

SELECT DISTINCT 
    E.FirstName + ' ' + E.LastName [Full Name], 
    P.ProductName, 
    OD.Quantity 
FROM Employees E, 
     Products P, 
     [Order Details] OD, 
     Orders O 
WHERE 
    E.EmployeeID = O.EmployeeID 
    AND O.OrderID = OD.OrderID 
    AND OD.ProductID = P.ProductID 

在罗斯文还给因为这是改变(因为每次发货日期)的Quantity重复FullNamesProductNamesSQL鲜明的总和

我想只显示一个名称到一个特定的ProductName与总量而不是划分。

+4

您正在寻找['GROUP BY'(https://msdn.microsoft.com/en-us/library/ms177673.aspx?f=255&MSPPError = -2147217396)。请请请开始使用[ANSI语法](http://stackoverflow.com/questions/1599050/ansi-vs-non-ansi-sql-join-syntax)进行连接。 –

+0

为什么不把'Quantity'放在'SELECT'之外? –

+0

@BJMyers,你能为这个例子更具体吗? – N3wbie

您需要使用GROUP BYSUM

SELECT 
    e.FirstName + ' ' + e.LastName AS [Full Name], 
    p.ProductName, 
    SUM(od.Quantity) AS [Quantity] 
FROM Employees e 
INNER JOIN Orders o 
    ON o.EmployeeID = e.EmployeeID 
INNER JOIN [Order Details] od 
    ON od.OrderID = o.OrderID 
INNER JOIN Products p 
    ON p.ProductID = od.ProductID 
GROUP BY 
    e.FirstName + ' ' + e.LastName, 
    p.ProductName 

注意,你需要stop using the old-style JOIN syntax.

我认为,这是一个良好的讨论问题。

正确的查询总是取决于您的实际需求。

我认为你的表过于正常。在这种情况下,他们中的大多数人也会将Employeeid保留在order_detail表中。

同时,它们中的大多数在Order表中保留了总和值。 像订单表中的数量,数量和等的总和。

你也可以创建没有聚合函数的视图加入所有表。

恕我直言,在如此多的列上使用Group By子句以及在varchar列上也是坏主意。

尝试这样的事情,

;With CTE as 
(
SELECT 
    E.FirstName + ' ' + E.LastName [Full Name], 
    O.OrderID,od.qty,P.ProductName 
FROM Employees E 
inner join Orders O on E.EmployeeID = O.EmployeeID 
inner join [Order Details] OD on o.orderid=od.orderid  
inner join [Products] P on p.ProductID=od.ProductID 
) 
,CTE1 as 
(
select od.orderid, sum(qty) TotalQty 
from CTE c 
group by c.orderid 

) 

select c.[Full Name],c1.TotalQty, P.ProductName from cte c 
inner join cte1 c1 on c.orderid=c1.orderid