はい、このようなケースステートメントで書き直すことができます
SELECT Column1,
CASE WHEN Column2 IS NOT NULL AND Column3='Value' THEN 'Testing #1'
WHEN Column3 IS NULL AND Column2='Test Value' THEN 'Testing #2'
ELSE 'Testing #3' END as customcol
FROM MyTable
編集:あなたのコメントによると、対処する必要がある2つの問題があるため、この編集を行っています。(誰かを助けるかもしれない場合に備えて、元の回答をそのままにしておきます。)
1) 結果セットをフィルタリングする必要があり、パーツがない必要がありelse
ます。
else
これはオプションであり、最後に where 句を使用してデータをフィルタリングできるため、このソリューションで実際に達成可能です。
Testing #
2)基準に一致する場合、同じ行を異なる値で複数回選択できること。
ただし、これは以前のソリューションでは達成できません。そこで、別のものを考えました。それがあなたのケースに収まることを願っています。ここにあります
S1 -Testing #
値 ( Testing #1
、など)Testing #2
を含む新しいテーブルを作成しますTesting #3
。このテーブルの名前がTesting
.
S2 - メイン テーブル ( MyTable
) を、値Testing
を含むテーブルと結合しますTesting #
。これで、実際のデータとテスト値のすべての可能な組み合わせが得られました。
S3 - 表示したくない結果を where 句でフィルタリングします。
S4 - where 句に追加して、実データ <-> テストの組み合わせをフィルター処理します。
終了クエリは次のようになります。
SELECT M.Column1, T.TestingValue
FROM MyTable M
INNER JOIN Testing T ON 1=1
WHERE
(
(M.Column2 IS NOT NULL AND M.Column3='Value' AND T.TestingValue='Testing #1') OR
(M.Column3 IS NULL AND M.Column2='Test Value' AND T.TestingValue='Testing #2') OR
<conditions for other testing values>
)
AND
<other conditions>
これが機能し、必要な結果が得られるはずです。しかし、私はデータを持っていないので、ユニオンベースのソリューションに対してベンチマークを実行することはできません. したがって、これがより高速であると主張する科学的証拠はありませんが、オプションです。両方をテストして、より良い方を使用できます。
少し遅いかもしれませんが、これで問題が解決することを願っています。