我喜欢在where子句中使用“ IF”条件。从各种线程来看,我知道选项之一是CASE表达式,但我无法弄清楚。
样例代码:
select * from sampleTable where If @taxtype = 'P' then (taxtype = 'P' or (taxtype = 'E' and code in ('MER','SER'))) Else (taxtype = 'E' and code not in ('MER','SER')) End If
任何帮助是极大的赞赏。
谢谢!
select * from sampleTable where case when @taxtype = ‘P’ then (taxtype = ‘P’ or (taxtype = ‘E’ and code in (‘MER’,’SER’))) Else (taxtype = ‘E’ and code not in (‘MER’,’SER’)) end
看起来这将与Postres一起使用
编辑:
留下我的原始答案是因为要点可行,但Postgres没有像其他RDBMS一样具有变量的概念,因此我将其重写为
WITH myconstants as (SELECT 'P'::text as vtaxtype) select * from sampleTable where case when (select vTaxType from myconstants) = 'P' then (taxtype = 'P' or (taxtype = 'E' and code in ('MER','SER'))) Else (taxtype = 'E' and code not in ('MER','SER')) end;
这是一个SQL Fiddle显示