【问题标题】:sql-access: HAVING clause and != operatorsql-access: HAVING 子句和 != 运算符
【发布时间】:2010-05-12 02:15:30
【问题描述】:

我是访问 sql 的新手,我构建了一个如下所示的 select 语句:

SELECT [Lab Occurrence Form].[Practice Code], 
       Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) AS [CountOf1 0 Preanalytical (Before Testing)], 
       [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]
  FROM [Lab Occurrence Form]
 WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between #9/1/2009# And #9/30/2009#))
having ([CountOf1 0 Preanalytical (Before Testing)] != 0)
GROUP BY [Lab Occurrence Form].[Practice Code], [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)];

它不喜欢我的 HAVING 子句。它有什么问题?我该怎么做!= ??

【问题讨论】:

    标签: sql ms-access ms-access-2007


    【解决方案1】:

    它不起作用,因为HAVING 子句必须在GROUP BY 之后 - 使用:

      SELECT [Lab Occurrence Form].[Practice Code], 
             Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) AS [CountOf1 0 Preanalytical (Before Testing)], 
             [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]
        FROM [Lab Occurrence Form]
       WHERE ((([Lab Occurrence Form].[Occurrence Date]) Between #9/1/2009# And #9/30/2009#))
    GROUP BY [Lab Occurrence Form].[Practice Code], [Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]
      HAVING Count([Lab Occurrence Form].[1 0 Preanalytical (Before Testing)]) != 0);
    

    此外,您通常不能在 GROUP BY/HAVING 子句中使用列别名。

    != 是 ANSI 92?标准,但<> 也应该可以工作。

    【讨论】:

    • != 很可能是 ANSI 92 SQL,但 Access SQL92“兼容”模式不支持它——只有 有效。
    【解决方案2】:

    使用<>。 IIRC,!= 可以在 MySQL 中工作

    【讨论】:

    • 试过了,但没有用,当我尝试运行查询时,它实际上问我 [CountOf1 0 Preanalytical (Before Testing)] 的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多