ACCESS SQL>选择案例帮助

时间:2009-05-14 15:51:49

标签: sql ms-access

我有一组表,包括Reps,Teams,Errors,Error Log。 错误日志列出了代表所做的所有错误。每个代表都在一个团队中。每个代表都有一个边缘ID(用户编号) 每种不同类型的错误都有一个点值(存储在错误表中)。

我在Access中查询了两个日期之间团队中每个代表的总分值:

SELECT 
    Reps.Forename
    , Reps.Surname
    , [Error Log].[Edge ID]
    , Teams.[Team Code]
    , Sum(Errors.Points) AS SumOfPoints
FROM Teams 
    INNER JOIN (
        Reps INNER JOIN (
            Errors INNER JOIN [Error Log] 
                ON Errors.[E&CD code] = [Error Log].[E&CD Code]) 
            ON Reps.[Edge ID] = [Error Log].[Edge ID]) 
        ON Teams.[Team Code] = Reps.[Team Code]
WHERE 
    ((([Error Log].[Date Logged]) Between [Error logged from: (dd/mm/yyyy)] And [Error logged to: (dd/mm/yyyy)]) 
AND 
    ((Teams.[Team Code])=[Team Code:]))
GROUP BY 
    Reps.Forename
    , Reps.Surname
    , [Error Log].[Edge ID]
    , Teams.[Team Code]
ORDER BY 
    Sum(Errors.Points) DESC;

我想给每个代表一个等级取决于他们的分数,其中: 0-4分= 3级,5-9 = 4和10 + = 5

我如何编码(也许是SELECT CASE)?我一直在尝试最后一小时,但无法正确使用它!

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

Access不支持选择案例结构。相反,您需要使用Switch函数

Switch(SumOfPoints >= 10, 5, SumOfPoints >=5, 4, ...)

答案 1 :(得分:2)

我认为你可以在MS Access SQL中在线使用IIF( )语句来获得同样的东西......

你可以尝试

SELECT 
    Reps.Forename
    ...
    , Sum(Errors.Points) AS SumOfPoints
    , IIf(Sum(Errors.Points) > 5, "Super Star", "Dummy")
    ... and so on ...

答案 2 :(得分:1)

您可能想要为成绩创建一个表,这样您只需要维护表而不是代码。加入你的分数。

得分|年级 0,3 1,3 ... 10,5

如果不在表中那么= 5.

此外,可以有StartScore,EndScore和Grade。开始和结束之间的任何分数都将得到评分。