sqlServer,oracle中case关键字的用法
在写SQL时,有时要根据已有的列值构造新的列值,这时就要用到的SQL中的case关键字。如下所示查询负责人信息表(T_MS_CustomerCrmInfoDutyPerson)中的是否是主要负责人(isMainDuty)字段,但是这个字段的值是以枚举的方式存储的,存储0表示是否,1表示是,否则表示未判断。这时直接查询出的值不是自己需要的值,可以用case关键字重新构建列值。
select case
when cfdutystate=0 then '否'
when cfdutystate=1 then '是'
else null
end as isMainDuty
from T_MS_CustomerCrmInfoDutyPerson
注意点:
1,以case开头,以end结尾
2,when后跟条件分支中,then后为显示结果
3,else为除此之外的默认情况,类似于java的switch case的default,可以不加
4,Oracle中end后跟别名或者sqlserver中语法如下:
isMainDuty =case
when cfdutystate=0 then '否'
when cfdutystate=1 then '是'
else null
end
除此之外,case也可以用到group by语句中以根据需要实现灵活的分组操作,如下所示的列子:
SELECT
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
&n
相关文档:
Oracle外部身份认证研究
密码文件认证 操作系统认证 remote_login_passwordfile SQLNET.AUTHENTICATION_SERVICES &nb ......
CREATE OR REPLACE PROCEDURE kevin_proc(x varchar) IS
a VARCHAR(20);
b VARCHAR(20);
CURSOR mycur(rn NUMBER) IS SELECT * from t_kevin_test WHERE ROWNUM<rn;
BEGIN
OPEN mycur(10);
LOOP FETCH mycur INTO a,b;
EXIT WHEN mycur%NOTFOUND;
Dbms_Output.put_line('a: '||a);
Dbms_Output.put_line('b: '| ......
大致分为三部份,1.SQL,2.ERP本身,3.本机
1.如果是SQL导出时出现,乱码可以通过修改NLS_LANG,来避免乱码,
繁体修改成:TRADITIONAL CHINESE_TAIWAN.ZHT16BIG5
简体修改成: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
英文就不用说了!!
2.如果是ERP export 时出现乱码,可以通过设置profile来设置FND: NATIVE CLIENT ENC ......
2010-04-21 14:04
oracle中构造数组的例子:
declare
type t_varray is varray(4) of number;
arr t_varray;
begin
arr := t_varray(1,2,3,4);
for i in 1..arr.count loop
dbms_output.put_line(arr(i));
end loop;
end;
构造二维数组的例子:
declare
type t_varray ......
什么是合并多行字符串(连接字符串)呢,例如:
SQL> desc test;
Name Type Nullable Default Comments
------- ------------ -------- ------- --------
COUNTRY VARCHAR2(20) Y
CITY VARCHAR2(20) Y
SQL> select * from test;
COUNTRY CITY
-------------------- --------------------
中国 台北
中国 香 ......