gpt4 book ai didi

mysql - SQL - IIF 子句位于 select 语句之外?

转载 作者:行者123 更新时间:2023-11-29 11:42:11 25 4
gpt4 key购买 nike

我正在 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 类型的示例 - 查看“grades”是否包含星号并创建一个指示器:

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

最佳答案

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

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 来快速解决此问题。

关于mysql - SQL - IIF 子句位于 select 语句之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com