データベースにはArtistとFilterの 2 つのテーブルがあります。単一のSQL ステートメントでFilterのサブクエリ結果に基づいてArtistの列をクエリする方法はありますか?
疑似コード:
SELECT (SELECT ColumnName FROM Filter WHERE ShowColumn=1) FROM Artist
- アーティスト
---------------------------------------------- | | ID | 名 | 姓 | ジャンル | ---------------------------------------------- | | 1 | ジョン | ジョン | コルトレーン | ジャズ | | | 2 | ジミ | ジミ | ヘンドリックス | ロック | ロック | | | 3 | ウルリッヒ | シュナウス | 電子 | 電子 | ----------------------------------------------
- フィルター
-------------------------------- | | ID | 列名 | 表示列 | -------------------------------- | | 1 | 名 | 1 | | | 2 | 姓 | 0 | | | 3 | ジャンル | 1 | --------------------------------
- 予想された結果
------------------------------- | | ID | 名 | ジャンル | ------------------------------- | | 1 | ジョン | ジョン | ジャズ | | | 2 | ジミ | ジミ | ロック | ロック | | | 3 | ウルリッヒ | 電子 | 電子 | -------------------------------
私ができる最善の方法は multiple を使用するCASE..WHEN
ことですが、それはそれほどエレガントではなく、余分な迷惑な NULL フィールドがいくつかあります。
SELECT
CASE WHEN (SELECT ShowColumn FROM Filter WHERE ColumnName='FirstName') THEN FirstName END,
CASE WHEN (SELECT ShowColumn FROM Filter WHERE ColumnName='LastName') THEN LastName END,
CASE WHEN (SELECT ShowColumn FROM Filter WHERE ColumnName='Genre') THEN Genre END
FROM Artist