MS Access Typecasting Number to Double

时间:2009-12-12 16:31:59

标签: ms-access types ms-access-2007 decimal

我有一个MS Access 2007数据库,其中包含已通过和未通过考试的失败记录。

Student_id, Course_id, passed
S001        C001       0
S001        C001       1
S002        C001       1
S003        C001       0

'Passed'用作布尔值,其中0表示失败并传递1,但存储为数字。

我想构建一个查询,显示每个学生每个课程的尝试次数。这可以通过平均传递的数量来完成。 S001的平均值为0.5,S002为1,S003为0.这表示S001在2次尝试后通过,S002在1次后,S003从未成功。

SELECT Student_id, Course_id, avg(passed) 
FROM tbl 
GROUP BY Student_id, Course_id, passed

问题是:平均值都是0或1.我的猜测是该数字不会转换为double(允许小数)。如何将平均值转换为允许小数的数据类型?

2 个答案:

答案 0 :(得分:3)

我没有看到问题。我用相同的数据创建了一个测试表,当我运行这个SQL时:

  SELECT Student_id, Course_id, avg(passed) 
  FROM tbl 
  GROUP BY Student_id, Course_id

我得到了这个结果:

Student_ID  Course_ID   AvgOfPassed
      S001       C001   0.5
      S002       C001   1
      S003       C001   0

您原始发布的SQL应该为原始表中的每一行生成一行,因为您在GROUP BY中错误地包含了PASSED。

我的问题是,您正在查看您认为产生错误结果的数据。很明显,使用您提供的数据和所需结果的描述,Access正好返回您的要求,如果正确编写SQL。

答案 1 :(得分:1)

  

我想构建一个查询,显示每个学生每门课程的尝试次数。

使用:

  SELECT student_id,
         course_id,
         COUNT(*) AS num_attempts
    FROM TBL 
GROUP BY student_id, course_id

我不知道平均值在哪里有意义。如果你想让学生通过百分比:

    SELECT t.student_id,
           t.course_id,
           COUNT(*) AS num_attempts,
           x.num_passed / COUNT(*) AS pass_percentage
      FROM TBL t
 LEFT JOIN (SELECT student_id,
                   course_id,
                   COUNT(*) AS num_passed
              FROM TBL
             WHERE passed = 1
          GROUP BY student_id, course_id) x ON x.student_id = t.student_id
                                           AND x.course_id = t.courseid
  GROUP BY t.student_id, t.course_id