高级sql请教,目前没有人解决
现在一张表,字段如下
ID ANAME ATJ AVALUE
1 a 1 11
2 b -1 -11
3 c 0 100
4 d 1 111
如果atj=1则执行id> 1
如果atj=-1则执行id <3
如果atj=0则执行(id> 1 or id <3)
下面我做的是不对的,请问高手门如何实现
select case when atj=1 then id> 1
case when atj=-1 then id <3
case when atj=0 then (id> 1 or id <3)
from aaa
------解决方案--------------------不知道,好像不行 你看用这种行吗?试试看!~~ (ATJ为表名,其他的一样)
select a.*
from ATJ a
where a.atj = 1
and a.id > 1
union
select a.*
from ATJ a
where a.atj = -1
and a.id < 3
union
select a.*
from ATJ a
where a.atj = 0
and a.id > 1
and a.id < 3;
结果:---------------------------------
ID ANAME ATJ AVALUE
---------- ----- ---------- ----------
2 b -1 -11
4 d 1 111
------解决方案--------------------把判断逻辑写在程序里.
或在存储过程中用动态SQL出数据也会方便很多.
------解决方案--------------------SELECT *
FROM aaa
where (id> 1 or (:atj <> 1))
and (id <3 or (:atj <> -1))
and ((id> 1 or id <3) or (:atj <> 0))
--atj为参数