作者fantasyj (如梦似幻)
看板Database
标题Re: [SQL ] 有关case when的两个问题
时间Sat May 25 23:23:07 2013
※ 引述《bbsn (bbsn)》之铭言:
: ※ 引述《greetmuta (愚零斗武多)》之铭言:
: : --问题一
: : select (case when (case when 2>1 then 'A' else 'B' end) ='A' then 'C' else
: : 'D' end) as my_column
: : --问题二
: : select * from test3 where price < (case when 2>1 then 50 else 20 end)
: : 希望有帮上你的忙~
: 有关於问题一,我大致上修改成如下,不过会出来错误
: 错误:无法系结多重部分 (Multi-Part) 识别码 "B.redate"
: select (case when B.redate is null then (case when B.des is null then
: A.opdate else B.opdate end) else B.redate end) as opdate
: from 资料表A as A join 资料表B as B on A.no=B.no
: 有关於问题二,我写我想表达的,不过会出来错误,我知道是在where 的那个opdate,不
: 过没有办法从as新的opdate出来的资料来选吗?
: 错误:模棱两可的资料行名称 'opdate'
: select (case when B.redate is null then (case when B.des is null then
: A.opdate else B.opdate end) else B.redate end) as opdate
: from 资料表A as A join 资料表B as B on A.no=B.no where opdate='2013/05/05'
: 再麻烦解答,谢谢~~
直接把case条件式写在where後试试
select *
from 资料表A as A join 资料表B as B on A.no = B.no
where (case
when B.redate is null then
(case
when B.des is null then
A.opdate
else
B.opdate
end)
else
B.redate
end) = '2013/05/05';
如果不行那就要再包一层再过滤条件了
select T.opdate
from (select (case
when B.redate is null then
(case
when B.des is null then
A.opdate
else
B.opdate
end)
else
B.redate
end) as opdate
from 资料表A as A join 资料表B as B on A.no = B.no) as T
where t.opdate = '2013/05/05';
from 资料表A as A join 资料表B as B on A.no = B.no
where
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.164.90.36