SELECT a.id,
“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 创新互联是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于成都网站设计、网站制作、外贸营销网站建设、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!
a.name,
a.dept,
CASE
WHEN (SELECT COUNT (1) cnt
FROM b
WHERE a.name = b.name AND b.TYPE '03') 0
THEN
ELSE
1
END
flag
FROM a
不过还需要考虑一个问题就是:如果B表中找不到记录时,flag如何赋值。
上面这个sql针对这个情况会赋值1
SELECT
distinct id,state,name
FROM
table1 main
WHERE
NOT EXISTS( select 1 FROM table1 sub where main.id=sub.id AND main.statesub.state);
未经测试。。。纯属手写,,如果以自己多年经验来说的话。。这段话应该不会有多大问题。。。希望你自己仔细测试之后能够提出宝贵意见!!!
oracle的if语句采用decode函数。
DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
表示如果value 等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。
Oracle数据库是对标准sql语言的过程化扩展,因此产生了pl/sql语言。其中的if语句大量使用使得程序模块化的功能方便实用。现在要讨论的是if语句的基本使用方法。
连接数据库
请输入用户名: scott/123456
设置环境变量
SQL set serveroutput on
定义两个字符串变量,然后赋值,接着使用if……then语句比较两个字符串变量的长度,并输出比较结果。
declare
a varchar(10);
b varchar(10);
begin
a:='beijing';
b:='guangdong';
if length(a)length(b)
then dbms_output.put_line('ab');
end if;
end;
过if……then……else语句实现只有年龄大于等于56岁,才可以申请退休,否则程序会提示不可以申请退休。
declare
a number(10);
begin
a:=x;
if a=56
then dbms_output.put_line('可以申请退休');
else dbms_output.put_line('不可以申请退休');
end if;
end;
制定一个月份数值,然后使用if……then……elsif语句判断它所属的季节,并输出季节信息。
declare
mon number(10);
begin
mon:=x;
if mon=3 or mon=4 or mon=5
then dbms_output.put_line('春节');
elsif mon=6 or mon=7 or mon=8 then dbms_output.put_line('夏季');
elsif mon=9 or mon=10 or mon=11 then dbms_output.put_line('秋季');
elsif mon=12 or mon=1 or mon=2 then dbms_output.put_line('冬季');
end if;
end;
制定一个季度数值,然后使用case语句判断它所包含的月份信息并输出。
declare
ss number(10);
begin
ss:=x;
case
when ss=1 then dbms_output.put_line('包含月份3,4,5');
when ss=2 then dbms_output.put_line('包含月份6,7,8');
when ss=3 then dbms_output.put_line('包含月份9,10,11');
when ss=4 then dbms_output.put_line('包含月份12,1,2');
end case;
end;
好像是标准sql吧,就这么写啊。不过大表可不能这么做哦,太占资源了。
补充:
oracle里面有“+”的,不过我怀疑你是不是要拼两个字符串。正统数据库,包括oracle和db2拼接字符串都是采用双竖线“||”,加号只能用于使两个整型或者浮点型数值相加。
这需要看你的相关字段的类型的。如果是数值型,需要首先转换为字符型,再合并,例如:
select
*
from
a
where
to_char(col001)||to_char(col002)
not
in
(select
to_char(col001)||to_char(col002)
from
b)
如果是字符型,可以直接合并:
select
*
from
a
where
col001||col002
not
in
(select
col001||col002
from
b)
如果是date型,同样转换为字符,具体查手册。
但是你这种写法,怎么说呢,不太好把,首先这并不是严格按照你所描述的逻辑,举例来说,如果表a字段是:"12","3",表b是:"1","23"那又会怎样?另外,not
in总是执行全表扫描,效率不高,这样写会好一些:
select
a.*
from
a
left
join
b
on
(a.col001
=
b.col001
and
a.col002
=
b.col002)
where
b.col002
is
null
是存储过程里面的 IF/ELSE ? 还是简单的 DECODE ?
SQL DECLARE
2 testvalue INT;
3 BEGIN
4 testvalue := 100;
5
6 IF testvalue 100 THEN
7 dbms_output.put_line( '100+' );
8 ELSIF testvalue = 100 THEN
9 dbms_output.put_line( '100' );
10 ELSE
11 dbms_output.put_line( '100-' );
12 END IF;
13
14 END;
15 /
100
PL/SQL procedure successfully completed.
SQL SELECT
2 DECODE(GROUPING(sale_item), 1, 'ALL', sale_item) AS iten,
3 SUM(sale_money) AS money
4 FROM
5 sale_report
6 GROUP BY
7 ROLLUP(sale_item);
ITEN MONEY
------ ----------
A 733285
B 2382
C 5738
ALL 741405
insert into table1 values(a1,a2,aid in(select aid from p where p.name=''),cid in (select sid from u where u.name='aa'))
应该要把 aid in ,cid in去掉吧?
最简单的方式,把后面两个字段设置为非空,让oracle报错去。。呵呵