SQL 不同的总和
SQL Distinct Sum
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
在 Northwind 中返回重复的 FullNames
和 ProductNames
,因为 Quantity
已更改(因为每次发货的日期)。
我只想给特定的 ProductName
显示一个名称和总数量而不是分开。
您需要将 GROUP BY
与 SUM
一起使用:
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
我认为这是一个值得讨论的好问题。
正确的查询总是取决于您的实际需求。
我觉得你的table太多了normalise.In这样的情况大部分也会把Employeeid保留在order_detail table.
同时,它们中的大多数都按顺序table保存总和值。
比如数量总和,数量总和等每个 orderid table.
您也可以在不使用聚合函数连接所有 table 的情况下创建视图。
恕我直言,在这么多列和 varchar 列上使用 Group By 子句是个坏主意。
尝试这样的事情,
;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
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
在 Northwind 中返回重复的 FullNames
和 ProductNames
,因为 Quantity
已更改(因为每次发货的日期)。
我只想给特定的 ProductName
显示一个名称和总数量而不是分开。
您需要将 GROUP BY
与 SUM
一起使用:
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
我认为这是一个值得讨论的好问题。
正确的查询总是取决于您的实际需求。
我觉得你的table太多了normalise.In这样的情况大部分也会把Employeeid保留在order_detail table.
同时,它们中的大多数都按顺序table保存总和值。 比如数量总和,数量总和等每个 orderid table.
您也可以在不使用聚合函数连接所有 table 的情况下创建视图。
恕我直言,在这么多列和 varchar 列上使用 Group By 子句是个坏主意。
尝试这样的事情,
;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