日期:2014-05-17  浏览次数:20897 次

高级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为参数