admin

在where子句中使用“泪f”条件

sql

我喜欢在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

任何帮助是极大的赞赏。

谢谢!


阅读 185

收藏
2021-06-07

共1个答案

admin

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显示

2021-06-07