加入两个主和一个细节表
我正在与Northwind数据库(微软例子),我想知道每个地区的总销售额。 表这个例子是(地区,领土,EmployeeTerritories,雇员,订单和订单明细) 而且关系是:加入两个主和一个细节表
- 地区的许多领土
- 领土上许多EmployeeTerritories
- EmployeeTerritories 许多人一个员工到许多订单
- 订单一对多订单明细
- 员工
我知道我应该使用子查询,但我不知道如何。
select
*
from
Region R
inner join Territories T
on R.RegionID=T.RegionID
inner join EmployeeTerritories ET
on T.TerritoryID=ET.TerritoryID
inner join
(
select
E.EmployeeID,
E.FirstName,
E.LastName,
sum(OD.Quantity*OD.UnitPrice) as TotalEmployeeSale
from
Employees E
inner join Orders O
on E.EmployeeID=o.EmployeeID
inner join [Order Details] OD
on o.OrderID=OD.OrderID
Group by
E.EmployeeID,
E.FirstName,
E.LastName
)as ES on ET.EmployeeID=ES.EmployeeID
我用这个SQL查询来计算每个员工的销售总额,但我怎么能Caclulate是每个区域。
还没有把访问罗斯文现在,所以这是未经测试,但你应该明白我的意思...
没有必要获取数据有关的员工,如果你想要的是每个地区的销售。您的查询是多余的,因此...
select
r.RegionDescription,
sum(OD.Quantity*OD.UnitPrice)
from
Region R
inner join Territories T
on R.RegionID=T.RegionID
inner join EmployeeTerritories ET
on T.TerritoryID=ET.TerritoryID
inner join Employees E
on ET.EmployeeID=E.EmployeeID
inner join Orders O
on E.EmployeeID=o.EmployeeID
inner join [Order Details] OD
on o.OrderID=OD.OrderID
Group by r.RegionDescription
正如评论,如雇员被分配到一个以上的区域这个“双数”的销售进行讨论。在许多情况下,这是所希望的行为 - 如果您想知道某个地区的效果如何,您需要知道该地区有多少销售额,并且如果员工分配到多个地区,则这不会影响该地区的表现。
但是,这意味着如果合计所有区域,则会夸大销售额。
有两种策略可以避免这种情况。一种是将销售分配给一个地区;在评论,你说有上做出这一决定没有数据,所以你能做到这一点的“最低regionID) - 是这样的:
select
r.RegionDescription,
sum(OD.Quantity*OD.UnitPrice)
from
Region R
inner join Territories T
on R.RegionID=T.RegionID
inner join EmployeeTerritories ET
on T.TerritoryID=ET.TerritoryID
inner join Employees E
on ET.EmployeeID=E.EmployeeID
inner join Orders O
on E.EmployeeID=o.EmployeeID
inner join [Order Details] OD
on o.OrderID=OD.OrderID
Group by r.RegionDescription
having et.TerritoryID = min(territoryID)
(同样,没有进入数据库,所以不能测试 - 但这应该筛选出重复项)
或者,您可以将销售额的一定比例分配给每个地区 - 尽管四舍五入可能会导致总计不能正确合计这是我想尝试的查询发帖之前虽然!
没有错,因为EmployeeTerritories是一个裁判表和Eche地区许多地区有许多员工和一名员工。总和(OD.Quantity * OD.UnitPrice) 错误。某些订单在此连接中重复使用,当您使用总和时,它会计算重复订单 – 2012-02-23 14:17:27
啊 - 好的。有没有办法将员工分配到一个地区,只有一个地区?如果没有,您的结果将会有点武断 - 您可以包含子查询以获得“最早”员工地区记录的销售额,但这可能违反业务需求... – 2012-02-23 14:22:11
无法将员工分配到一个地区。我的查询计算每个员工的总销售额。并将其加入员工地区。问题是,我如何总结每个地区的总额。一个TotalSale重复为每个员工在一个地区的领土记录 – 2012-02-23 14:32:33
请格式化的SQL,让别人可以阅读它 – Arion 2012-02-23 13:41:52