0

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

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

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

这可能吗?

4

2 回答 2

3

这是一个条件值。Access 不支持case,但支持iif

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

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

于 2013-07-02T20:21:52.133 回答
1

如前所述CASE ... WHEN,Access 中没有语句,但您有两种可能性: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
于 2013-07-02T21:57:09.697 回答