基于当前表格总和的匹配字段的MSAccess/SQL查找表。

问题描述:

我一直在为最后一周与许多尝试解决方案作斗争。我想要返回表中的唯一名称与他们的积分和他们当前的舞蹈水平的总和。最终,我想要将返回的舞蹈级别与客户表格中存储的内容进行比较,并且仅显示两个舞蹈级别不同的记录(存储的舞蹈级别和基于当前点数总和计算出的舞蹈级别。基于当前表格总和的匹配字段的MSAccess/SQL查找表。

最终的解决方案将使用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 

我想通过使用SUM的ofi来找到每个客户的当前DLevel r第一个表格中的点数。我有第一个...

SELECT SUM(Points), CustomerID FROM PointsAllocation GROUP BY CustomerID 

效果很好,并给我每个客户的总分。然后,我可以将INNER JOIN加入到客户表中以获取人员姓名。完善。

现在我想从DanceLevel表添加DLEVEL到总和是用来查找阈值和不超过价值,所以我得到以下的结果:不显示

(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 

杰奎因为她的积分总和小于或等于2,所以给她一个计算出来的初学者舞步水平,而且这已经与她在客户表中的她的Dancelevel1相匹配。

任何想法的人?

+0

使用Tally表(谷歌它的文章与您的SQL方言相关的文章)插入DanceLevel表,以便您的INNER JOIN工作。 –

您可以从客户表开始,因为您想列出每个客户。然后将它与一个计算舞蹈水平和总分的子查询结合起来。最里面的子查询总计点数,然后加入有效的舞蹈级别,并从舞蹈级别中选择最大阈值。然后在阈值上再次加入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 
+0

我想知道如果有一个不同的起点会更聪明。做得好。非常令人印象深刻。它需要一点修改才能正确,但非常接近。需要将'On PointsTotal.Points> DanceLevel.Threshold'与'On DanceLevel.Threshold> PointsTotal.Points'交换并使用MIN not MAX。这使得能够计算出正确的舞蹈水平。 MSAccess也需要括号()第一个LEFT JOIN。然后所有的工作都成功 – Dacam

+0

啊,对不起,我错误地解释了你希望你的门槛如何工作。我编辑了我的答案来修复查询。 –