Sql 无法按正确加入和分组
我的基本结构如下所示Sql 无法按正确加入和分组,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,我的基本结构如下所示 Sales.Customers Sales.Orders Sales.OrderDetails --------------- ------------ ------------------ country orderid orderid custid custid qty 因此,我需要返回美国客户,并为每个客户返回订单总数和总数量。我写了这样的疑问: SELECT
Sales.Customers Sales.Orders Sales.OrderDetails
--------------- ------------ ------------------
country orderid orderid
custid custid qty
因此,我需要返回美国客户,并为每个客户返回订单总数和总数量。我写了这样的疑问:
SELECT
C.custid, SUM(O.orderid) as numorders,
SUM(OD.qty) as totalqty
FROM Sales.Customers AS C
JOIN Sales.Orders AS O
ON C.custid = O.custid
JOIN Sales.OrderDetails AS OD
ON O.orderid = OD.orderid
WHERE country = 'USA'
GROUP BY C.custid;
不幸的是,我得到了这样的结果:
custid numorders totalqty
----------- ----------- -----------
32 235946 345
36 94228 122
43 21027 20
....... ..... ....
而不是
custid numorders totalqty
----------- ----------- -----------
32 11 345
36 5 122
我不明白哪里出了错 这应该可以:
SELECT C.custid,
COUNT(DISTINCT O.orderid) as numorders,
SUM(OD.qty) as totalqty
FROM Sales.Customers AS C
INNER JOIN Sales.Orders AS O
ON C.custid = O.custid
INNER JOIN Sales.OrderDetails AS OD
ON O.orderid = OD.orderid
WHERE country = 'USA'
GROUP BY C.custid
ORDER BY C.custid;
这应该做到:
SELECT C.custid,
COUNT(DISTINCT O.orderid) as numorders,
SUM(OD.qty) as totalqty
FROM Sales.Customers AS C
INNER JOIN Sales.Orders AS O
ON C.custid = O.custid
INNER JOIN Sales.OrderDetails AS OD
ON O.orderid = OD.orderid
WHERE country = 'USA'
GROUP BY C.custid
ORDER BY C.custid;
再读一点,你有两件事错了。你是对订单进行求和而不是计数,你是根据数量进行分组。 尝试:
再读一点,你有两件事错了。你是对订单进行求和而不是计数,你是根据数量进行分组。 尝试:
谢谢,现在我正确地得到了totalqty列,并且只得到了不同的custid,但是numorders还是错了(是的,请参见下文(您将订单ID相加,而不是计数)。谢谢,现在我正确地得到了totalqty列,并且只得到了不同的custid,但是numorders还是错了(是的,请参见下文)(您将对订单ID求和,而不是计算它们)。