创建查询作为Missing运算符时出错?

时间:2016-02-25 15:52:23

标签: sql database ms-access

我试图以表格格式提取具有不同兼职和全职值的数据,以获得如下输出:

Expected Output

但我的查询会生成此错误:

  

语法错误缺少运算符

此查询缺少哪个运算符?

SELECT
    BANINST1_SZVIRST.SZVIRST_TERM_DESC,
    Count(BANINST1_SZVIRST.SZVIRST_FULL_PART_IND="F") AS ["Full-time Undergraduate Enrollment"], 
    Count(IIf(BANINST1_SZVIRST.SZVIRST_FULL_PART_IND="P",1,Null)) AS ["Part-time Undergraduate Enrollment"]
FROM BANINST1_SZVIRST
GROUP BY 
    BANINST1_SZVIRST.SZVIRST_TERM_DESC, 
    BANINST1_SZVIRST.SZVIRST_TERM_CODE, 
    BANINST1_SZVIRST.SZVIRST_LEVL_CODE, 
    BANINST1_SZVIRST.SZVIRST_FULL_PART_IND
HAVING
    (((BANINST1_SZVIRST.SZVIRST_TERM_CODE) In ("201020","201120","201220","201320","201420","201520","201620"))
    AND ((BANINST1_SZVIRST.SZVIRST_LEVL_CODE)="01"));

1 个答案:

答案 0 :(得分:2)

我认为您在测试中有4种不同的情况:

  1. 全职人员
  2. 兼职人员
  3. 毕业生的数量
  4. 欠大学毕业生的人数
  5. 您正在使用iif()声明。我认为这是你前一天或两年前提出的一个问题。 iif()语句将是:

    SUM(IIF(BANINST1_SZVIRST.SZVIRST_FULL_PART_IND="F", 1, 0)) as [FullTime],
    SUM(IIF(BANINST1_SZVIRST.SZVIRST_FULL_PART_IND="P", 1, 0)) as [PartTime],
    SUM(IIF(SZVIRST_LEVL_CODE="01", 1, 0)) as [Graduate],
    SUM(IIF(SZVIRST_LEVL_CODE="02", 1, 0)) as [UnderGraduate],
    

    我将COUNT()更改为SUM()只是因为感觉更自然,因为IIF()返回1或0.您可以将其更改为{{1}这也很好。

    检查两个条件

    如果您想要结合几个条件来计算,公式会略有变化。

    对于insstance,如果您想要计算所有同时也在毕业生中的全职人员,您可以使用:

    COUNT(Iif(<condition>, 1, null))

    这里我们将两个条件放在SUM(IIF(BANINST1_SZVIRST.SZVIRST_FULL_PART_IND="F" AND SZVIRST_LEVL_CODE="02", 1, 0)) AS [FullTimeUnderGraduates] 公式的第一个参数中。如果两者都是IIF(),则返回TRUE,然后汇总所有1个。

    最后,如果您想在查询中1 / count sumGraduate,那么您无法在Under Graduates中排除它们}子句。因此,您需要删除以下内容:

    HAVING

    否则就像

    那样的测试
    ((BANINST1_SZVIRST.SZVIRST_LEVL_CODE)="01") 
    

    总是会返回iif(BANINST1_SZVIRST.SZVIRST_LEVL_CODE="01", 1, 0)

    1

    将始终返回iif(BANINST1_SZVIRST.SZVIRST_LEVL_CODE="02", 1, 0)

    实施例

    以下内容应该在您的数据库中运行,并为您提供上述逻辑的良好工作示例:

    0