Sql server 按年度查询客户、采购总值和给予客户的总折扣
我正在使用Northwind数据库。我想写一个查询,显示客户、购买的总价值以及每年给客户的总折扣。我想展示1996年、1997年、1998年的所有客户 下面是我正在使用的表格Sql server 按年度查询客户、采购总值和给予客户的总折扣,sql-server,tsql,ssms,Sql Server,Tsql,Ssms,我正在使用Northwind数据库。我想写一个查询,显示客户、购买的总价值以及每年给客户的总折扣。我想展示1996年、1997年、1998年的所有客户 下面是我正在使用的表格 SELECT TOP (1000) [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode]
SELECT TOP (1000) [CustomerID]
,[CompanyName]
,[ContactName]
,[ContactTitle]
,[Address]
,[City]
,[Region]
,[PostalCode]
,[Country]
,[Phone]
,[Fax]
FROM [Northwind].[dbo].[Customers]
SELECT TOP (1000) [OrderID]
,[CustomerID]
,[EmployeeID]
,[OrderDate]
,[RequiredDate]
,[ShippedDate]
,[ShipVia]
,[Freight]
,[ShipName]
,[ShipAddress]
,[ShipCity]
,[ShipRegion]
,[ShipPostalCode]
,[ShipCountry]
FROM [Northwind].[dbo].[Orders]
SELECT TOP (1000) [OrderID]
,[ProductID]
,[UnitPrice]
,[Quantity]
,[Discount]
FROM [Northwind].[dbo].[Order Details]
以下是我写的问题:
SELECT o.customerID, year(o.OrderDate) as Year,
sum(od.UnitPrice * od.Quantity) as Total_value_of_purchase,
sum(od.UnitPrice * od.Quantity * od.Discount) as Total_discount_received,
sum((od.UnitPrice * od.Quantity)-(od.UnitPrice * od.Quantity * od.Discount)) as Total_after_discount
FROM Customers as c
cross JOIN Orders as o
left outer join [Order Details] as od
on o.OrderID=od.OrderID
GROUP BY o.CustomerID, Year(o.OrderDate)
order by o.CustomerID, Year(o.OrderDate)
这是我得到的结果的图片
您可以注意到,在某些情况下,客户可能不会每年都订购,所以我只得到234个结果。是否有任何方法可以显示所有客户和所有3年?因此,如果我有91个客户,结果将显示91*3=273个结果
你能给我提供一些指导或帮助吗?这样我就可以按照你的建议来解决这个问题了。我有一些最新消息。我试着使用union
SELECT c.CustomerID, y.YR,
sum(od.UnitPrice * od.Quantity) as Total_value_of_purchase,
sum(od.UnitPrice * od.Quantity * od.Discount) as Total_discount_received,
sum((od.UnitPrice * od.Quantity)-(od.UnitPrice * od.Quantity * od.Discount)) as Total_after_discount
FROM (SELECT 1996 YR UNION ALL SELECT 1997 UNION ALL SELECT 1998) y(YR)
CROSS JOIN Customers c
LEFT OUTER JOIN Orders o ON c.CustomerID = o.CustomerID
LEFT OUTER JOIN [Order Details] od ON o.OrderID = od.OrderID
GROUP BY c.CustomerID, y.YR
ORDER BY c.CustomerID, y.YR
结果是:
我确实得到了273个结果,但不是给我每年的总数,而是给了我所有年份的总数
有什么建议吗
附言:我这样做不是为了作业。我真的很想找到解决办法