如果我有这样简单的查询:
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
但是这会产生语法错误(缺少运算符)
这可能吗?
答案 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 Function和IIf 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