【问题标题】:SQL - IIF clause outside of select statement?SQL - 选择语句之外的 IIF 子句?
【发布时间】:2016-02-23 21:01:12
【问题描述】:

我在 MS Access 2010 中工作,在 SELECT 语句中执行一系列 UNION。在所有这些 UNION 完成后,我需要使用 IIF 语句添加几个新列(即,基于 ch 列的值)。但是,我似乎无法找到正确压缩此语法的方式或位置,以便 IIF 检查最终“联合”表中的整个列。简而言之,在运行以下语法(针对此问题进行了修剪和简化)之后,我想根据现有的列单元格(例如,'成绩')包含一个星号。非常感谢您的帮助和耐心——我刚刚开始熟悉 SQL 的语法原则。

SELECT * FROM(
      SELECT class, teacher, student
      grades2010 AS grades
      WHERE NOT(grades2010 IS NULL OR grades2010="")
      UNION
      SELECT class, teacher, student
      grades2011 AS grades
      WHERE NOT(grades2011 IS NULL OR grades2011="")
      UNION
      SELECT class, teacher, student
          grades2012 AS grades
          WHERE NOT(grades2012 IS NULL OR grades2010="")
)

这是我想要运行的 IIF 类型的示例 - 查看“成绩”是否包含星号并创建指标:

IIF(InStr([grades],"*")>0,"YES","NO") AS asterisk

【问题讨论】:

    标签: mysql sql ms-access ms-access-2010 iif


    【解决方案1】:

    所以...你在正确的轨道上。它看起来像:

    SELECT 
         IIF(InStr([grades],"*")>0,"YES","NO") AS asterisk,
         class,
         teacher,
         student
    FROM(
          SELECT class, teacher, student
          grades2010 AS grades
          WHERE NOT(grades2010 IS NULL OR grades2010="")
          UNION
          SELECT class, teacher, student
          grades2011 AS grades
          WHERE NOT(grades2011 IS NULL OR grades2011="")
          UNION
          SELECT class, teacher, student
              grades2012 AS grades
              WHERE NOT(grades2012 IS NULL OR grades2010="")
    ) as mysubquery
    

    但是... grades 不是您的 UNION 子查询中的列,所以这不起作用。您需要确保将 grade 列添加到子查询中的每个 SELECT 语句中,以便在主 SELECT 中对其进行任何处理。

    另外值得一提的是,您的架构并不是最好的。而不是每年都有一个表格,您应该只拥有一个以year 为列的表格。这将使您不必做这些讨厌的,而且通常很慢的联合查询。您可以通过创建一个表并在那里使用该 UNION 查询从每个基于年份的表中执行 INSERT 来快速解决这个问题。

    【讨论】:

      猜你喜欢
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      相关资源
      最近更新 更多