【问题标题】:Order by Clause conflicts with distinct in access?Order by Clause 与不同的访问权限冲突?
【发布时间】:2011-07-18 14:36:25
【问题描述】:

请帮我解决这个问题,因为我无法解决这个问题

尝试执行此语句时:

SELECT distinct grade
FROM tblStudents
ORDER BY Val([grade]),grade;

访问告诉我 ORDER BY 子句 Val([grade])Distinct 冲突

我该如何解决这个问题?

提前谢谢你

【问题讨论】:

  • 你想在这里做什么?我想,你应该可以通过按等级订购来实现这一点。
  • 我认为,如果您需要按与用于显示不同的数据表示进行排序,您会遇到数据存储问题。 Val() 函数意味着您要将字符串值转换为数值以进行排序,这意味着您将“98”和“100”作为字符串存储在 GRADE 字段中。如果这些是数字,则不需要使用 Val() 转换它们。另一方面,如果这些值实际上存储为数字,那么您只是在浪费时间和 CPU 周期将它们传递给 Val() 函数。

标签: sql ms-access


【解决方案1】:

您不能按未在 select distinct 语句中列出的列进行排序;如果您想将成绩强制转换为整数;

SELECT DISTINCT Val([grade])
FROM tblStudents
ORDER BY Val([grade]);

【讨论】:

    【解决方案2】:

    使用DISTINCT 关键字与SELECT 子句中的所有列分组效果相同:

    SELECT grade
      FROM tblStudents
     GROUP 
        BY grade
     ORDER 
        BY VAL(grade), grade;
    

    请注意,我必须删除 grade IS NULL 所在的行,否则我会收到错误消息“标准表达式中的数据类型不匹配”。

    【讨论】:

      【解决方案3】:

      使用这个:

      SELECT DISTINCT Val([grade])
      FROM tblStudents
      ORDER BY Val([grade]);
      

      非数字记录显示为 0。

      但下面显示了数字和非数字记录:

      SELECT grade
        FROM tblStudents
       GROUP BY grade
       ORDER BY VAL(grade), grade;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-24
        • 1970-01-01
        • 2012-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多