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

これは条件値です。アクセスはサポートしcaseていませんが、サポートしていiifます:

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

あなたのテキストはそれがまたはですと言ってMyItem'N'ます'Y'Flag( を使用する) コード サンプルの方が理にかなっていると思います。

于 2013-07-02T20:21:52.133 に答える
1

既に述べたように、Access にはステートメントはありませんが、 Switch FunctionIIf FunctionCASE ... WHENの 2 つの可能性があります。

- スイッチ機能の例:

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 に答える