2017-12-29 24 views
3

カラムAが空でない場合、条件を1つ追加し、空であれば別の条件を追加する必要があります。このような何か:ケース条件に応じて異なる条件をwhere節に追加

select * 
from table t 
where case when len(t.A) > 0 then t.A = (select B from anothertable) 
     else t.C = (select D from anothertable) 

これはないコンパイルを行い、そして私はWHEREIF句を使用することはできないので、これを達成するための他の方法はありますか?

答えて

5

我々はそれを動作させるためにWHERE句でログインを言い直すことができます。

SELECT * 
FROM table_t 
WHERE 
    (LEN(t.A) > 0 AND t.A IN (SELECT B FROM anothertable)) OR 
    (LEN(t.A) <= 0) AND t.C IN (SELECT D FROM anothertable)); 

anothertableリターンのサブクエリはより一つのレコードよりも、このクエリはどうかエラーかどう@HoneyBadgerによるコメントに対処するために我々はt.A = (subquery)を使用した。 equalsを使用する場合は、サブクエリが単一のレコードのみを返すようにする必要があります。 WHERE INを使用すると、問題が解決する可能性があります。

+0

これは私が探していたものだと思います。ありがとよ! – nikname

+0

さて、私は実際に 't.A IN(SELECT B FROM anothertable)...'を使うつもりです。ありがとう – nikname