上周,我一直在努力解决这个问题。我想在表中返回唯一的名字,包括他们的积分和他们当前的舞蹈等级。最终,我希望将返回的舞蹈级别与存储在客户表格中的内容与客户进行比较,并仅显示两个舞蹈级别不同的记录(存储的舞蹈级别和基于当前点数的计算的舞蹈级别。
最终解决方案将是使用ADODB连接到MSAccess DB(2013)的网页。但对于初学者来说,只是希望它能在MSAccess中运行。
我有一个带有下表的MSAccess DB(2013)。
PointsAllocation
CustomerID Points
100 2
101 1
102 1
100 1
101 4
DanceLevel
DLevel Threshold
Beginner 2
Intermediate 4
Advanced 6
Customer
CID Firstname Dancelevel1
100 Bob Beginner
101 Mary Beginner
102 Jacqui Beginner
我想通过在第一个表中使用其Points的SUM来找到每个客户的当前DLevel。我先这个......
SELECT SUM(Points), CustomerID FROM PointsAllocation GROUP BY CustomerID
效果很好,并给出了每位客户的总积分。然后,我可以将其加入到客户表中以获取人员姓名。完美。
现在我想将DanceLevel表中的DLevel添加到SUM总计用于查找阈值且不超过该值的结果中,因此我得到以下结果:
(1) (2) (3) (4)
Bob 3 Beginner Intermediate
Mary 5 Beginner Advanced
Where...
(1) Customer.Firstname
(2) SUM(PointsAllocation.Points)
(3) Customer.Dancelevel1
(4) Dancelevel.DLevel
Jacqui没有显示,因为她的点数总和小于或等于2,给她一个计算的初级舞蹈等级,这已经与她在客户表中的Dancelevel1相匹配。
任何想法?
答案 0 :(得分:0)
您可以从客户表开始,因为您想列出每个客户。然后左边加入一个子查询,计算舞蹈等级和总分。最里面的子查询总计得分,然后加入有效的舞蹈等级,并从舞蹈等级中选择最大阈值。然后再次在DanceLevel表上连接阈值以获得关卡的描述。
Select Customer.Firstname,
CustomerDanceLevels.Points,
Customer.Dancelevel1,
Dancelevel.DLevel
from Customer
left join
(select CustomerID, Points, Min(Threshold) Threshold
from
(select CustomerID, sum(Points) Points
from PointsAllocation
group by CustomerID
) PointsTotal
left join DanceLevel
on PointsTotal.Points <= DanceLevel.Threshold
group by CustomerID, Points
) CustomerDanceLevels
on Customer.CID = CustomerDanceLevels.CustomerID
left join DanceLevel
on CustomerDanceLevels.Threshold = DanceLevel.Threshold