SQL - 选择语句之外的 IIF 子句?
Posted
技术标签:
【中文标题】SQL - 选择语句之外的 IIF 子句?【英文标题】:SQL - IIF clause outside of select statement? 【发布时间】: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
【问题讨论】:
【参考方案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 来快速解决这个问题。
【讨论】:
以上是关于SQL - 选择语句之外的 IIF 子句?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用“WHERE”子句来选择 SQL 语句中的所有记录?