where 后面怎么加case语句 救命啊

zhouzhiyuan1985 2010-05-16 08:43:35
select * from cms_con_duebill a
where 1=1
and (case when 1=1 then
case a.duebillid='1'
else 1=1 end);


这个不行啊 我就想where 后面加case语句
...全文
940 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuhongpingimu 2010-05-18
  • 打赏
  • 举报
回复
看看大侠们怎么说的。
antonioye 2010-05-18
  • 打赏
  • 举报
回复
学习了
oraclemch 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cnham 的回复:]
最好用decode
[/Quote]

case when以及decode也是不行的,因为 多值判断函数是函数,不是表达式,它只能以表达式的方式调用,而且不能以判断条件的方式调用。

也就是在单条sql语句中,case when以及decode函数只能出现select 和 from tablename之间,不能出现在where或者on后面。
hebo2005 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tangren 的回复:]
3、case ... end case语句只存在pl/sql块或过程(存储过程、函数、触发器等)中。
[/Quote]
瞎说
CASE WHEN是标准SQL语法,可以用在SQL语句里,并且只要遵循标准SQL语法的数据库就能通用
DECODE是ORACLE自己的函数,只适用于ORACLE
如一楼就行了
cnham 2010-05-18
  • 打赏
  • 举报
回复
最好用decode
wangjiang87 2010-05-18
  • 打赏
  • 举报
回复
学习了
hebo2005 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 oraclemch 的回复:]
引用 7 楼 cnham 的回复:
最好用decode


case when以及decode也是不行的,因为 多值判断函数是函数,不是表达式,它只能以表达式的方式调用,而且不能以判断条件的方式调用。

也就是在单条sql语句中,case when以及decode函数只能出现select 和 from tablename之间,不能出现在where或者on后面。
[/Quote]
我用了好多次在WHERE好吧,请实际用过后再说话
我们经常这样用的

select
from a
where
a.id=decode(:in_id,0,a.id,:in_id)
表示传进去的参数是0的话,则是查全部纪录,否则是指定值
也可以用CASE when

a.id=
case
when :in_id=0
then a.id
else :in_id
end
效果是一样
可以看出DECODE简洁,但不是通用SQL
另外DECODE不支持OR AND 条件 如:in_id=0 or :in_id=999999,当然也是可以实现,就是一个个判断
另外DECODE不支持>,<等等
只能通过列多个选项,或者通过SIGN函数来实现
tangren 2010-05-16
  • 打赏
  • 举报
回复
3、case ... end case语句只存在pl/sql块或过程(存储过程、函数、触发器等)中。
zhouzhiyuan1985 2010-05-16
  • 打赏
  • 举报
回复
我就想 如果没有参数 则不用表连接啊
zhouzhiyuan1985 2010-05-16
  • 打赏
  • 举报
回复
不行啊 你看 vCondition:=vCondition||' and case when :pCustomerName is not null then
like ''%''||:pCustomerName||''%''
else then 1=1 end' ;
这个怎么整 有 like 语句的
tangren 2010-05-16
  • 打赏
  • 举报
回复
1、首先case是一个函数而非语句。
2、case既是函数,所以只能以表达式方式调用。
minoboy 2010-05-16
  • 打赏
  • 举报
回复
and (case when 1=1 then
case a.duebillid='1'
else 1=1 end);

2个CASE,一个END?结束的是哪个CASE?是不是语法有问题>
codearts 2010-05-16
  • 打赏
  • 举报
回复
select * from dual where 1=1 and 1=(case when 1=1 then 1 else 2 end);

select * from cms_con_duebill a
where 1=1
and a.duebillid = (case when 1=1 then '1' else '0' end) ;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧