Access SQL - 是否可以根据变量在SELECT中包含/排除列?

时间:2013-07-02 20:19:23

标签: sql ms-access

如果我有这样简单的查询:

SELECT Flag, Column1, Column2
FROM MyTable
WHERE Item = MyItem

此查询应返回1行,如下所示:

Flag    Column1   Column2
---------------------------
Y       123       ABC

如果MyItem =“Y”,我可以选择只包含“Column1”吗?如果MyItem =“N”,我可以选择只包含“Column2”吗?

所以我想看到这个:

Flag    Column1
--------------
Y       123

或者这个:

Flag    Column2
----------------
N       ABC

我认为它会在CASE中的某处包含SELECT语句但不确定语法。我试过这个:

SELECT This,
CASE WHEN Flag = "Y" THEN Column1 ELSE NULL END,
CASE WHEN Flag = "N" THEN Column2 ELSE NULL END
FROM MyTable
WHERE Item = MyItem

但是这会产生语法错误(缺少运算符)

这可能吗?

2 个答案:

答案 0 :(得分:3)

这是一个条件值。访问权限不支持case,但它支持iif

select this,
       iif(flag = 'Y', column1, column2) as value
from MyTable
where Item = MyItem

您的文字说明MyItem'N''Y'。我认为代码示例(使用Flag)更有意义。

答案 1 :(得分:1)

如前所述,Access中没有CASE ... WHEN语句,但您有两种可能:Switch FunctionIIf Function

- 切换功能示例:

SELECT Flag, Switch(flag = 'Y', column1, flag = 'N', column2) as Column
FROM MyTable
WHERE Item = MyItem

请注意,在Switch函数中,如果没有布尔表达式计算为True,则Switch返回Null。

- IIf功能示例:

SELECT Flag, IIf(flag = 'Y', column1, IIf(flag = 'N', column2, null)) as Column
FROM MyTable
WHERE Item = MyItem