‌‌Oracle CASE WHEN‌

‌‌Oracle CASE WHEN‌ 是条件判断语句的核心语法,支持简单表达式和搜索表达式两种形式,可用于SELECT、WHERE、GROUP BY等子句中实现复杂逻辑判断,其执行顺序自上而下,首次满足条件则终止判断。

‌CASE WHEN‌ 提供两种语法形式,满足不同场景需求:

1、    ‌‌简单CASE表达式‌:直接匹配列值与条件值,适用于等值判断。
CASE 列名
WHEN 值1 THEN 结果1
WHEN 值2 THEN 结果2
ELSE 默认值
END

示例:CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END‌‌1

2、    ‌‌搜索CASE表达式‌:支持更灵活的条件判断(如范围、不等式)。
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
ELSE 默认值
END

示例:CASE WHEN salary > 10000 THEN '高管' WHEN salary BETWEEN 5000 AND 10000 THEN '高绩效' ELSE '普通' END‌‌
3、Oracle CASE WHEN 在语句中的应用场景

    ‌SELECT子句‌:动态计算列值。
SELECT grade,
COUNT(CASE WHEN sex = 1 THEN 1 ELSE NULL END) AS 男生数,
COUNT(CASE WHEN sex = 2 THEN 1 ELSE NULL END) AS 女生数
FROM students
GROUP BY grade;

(统计不同年级的男女学生人数)‌‌2‌
2. ‌‌WHERE子句‌:条件筛选。

sqlCopy Code
SELECT *
FROM employees
WHERE CASE
WHEN deptno = 50 THEN salary > 6000
WHEN deptno = 60 THEN commission > 0.3
END;

(按部门动态筛选工资或提成比例)‌‌
3. ‌GROUP BY子句‌:自定义分组逻辑。
SELECT
CASE WHEN hire_date < 2010 THEN '资深员工'
WHEN hire_date < 2020 THEN '在职员工'
ELSE '未入职'
END AS 员工分组,
COUNT(*) AS 人数
FROM employees
GROUP BY 员工分组;

(按入职时间分段统计人数)‌‌
4、注意事项与最佳实践

    ‌执行顺序‌:WHEN子句按书写顺序判断,首个满足条件即终止。‌‌
    ‌性能优化‌:
        判断条件不超过10行时,优先使用‌DECODE函数(语法更简洁)。‌‌
        避免遗漏‌ELSE子句,否则未匹配项返回NULL可能影响统计结果。‌‌
    ‌‌Oracle 23c新特性‌:支持逗号分隔的多值匹配,简化等值判断(如CASE salary WHEN 9000,12000 THEN '标准薪资')

帮我看一下这个建表语句有什么问题 CREATE TABLE SJGC_6.IM_PRO_DATA_SOURCE ( ID LONG COMMENT '主键', DATA_SOURCE_PHY_PRI_KEY VARCHAR2(255) COMMENT '数据源物理对象主键', UNIFIED LONG COMMENT '统一标识', PROJECT_ID LONG COMMENT '项目ID', CN_NAME VARCHAR2(255) COMMENT '中文名称', EN_NAME VARCHAR2(255) COMMENT '英文名称', ORG_NAME VARCHAR2(255) COMMENT '所属组织名称', RESOURCE_ID LONG COMMENT '资源ID', GREENPLUM_ALLOCATION_ID LONG COMMENT 'greenplum配置id', TCHOUSE_ALLOCATION_ID LONG COMMENT 'TCHouse配置id', ENV_ID LONG COMMENT '环境id', ENV_TYPE VARCHAR2(255) COMMENT 'pro:生产,sit:测试,dev:开发', ADDRESS VARCHAR2(255) COMMENT '地址', ZOOKEEPER_QUORUM VARCHAR2(255) COMMENT 'zk地址', FULL_URL VARCHAR2(255) COMMENT '完整url地址', SCHEDULE_DATASOURCE_ID VARCHAR2(255) COMMENT '调度平台数据源id', DESCRIPTION VARCHAR2(255) COMMENT '描述', DATA_STRUCTURE VARCHAR2(255) COMMENT '1:关系型数据库,2:大数据存储,3:NoSQL,4:半结构化存储', DATA_TYPE VARCHAR2(255) COMMENT '11:MYSQL,12:ORACLE,13:GREENPLUM,14:SQLSERVER,15:CLICKHOUSE,16:POSTGRESQL;21:HIVE,22:HBASE,23:KUDU,24:KAFKA,31:MONGODB,32:REDIS,33:ELASTICSEARCH,41:HDFS,42:FTP,43:SFTP', SOURCE VARCHAR2(255) COMMENT '1:项目资源,2:数据工厂资源,3:其他外部资源', DATABASE VARCHAR2(255) COMMENT '数据库名称', NAME_SPACE VARCHAR2(255) COMMENT '命名空间', SCHEMA_NAME VARCHAR2(255) COMMENT '模式', HIVE_DATABASE_LOACTION VARCHAR2(255) COMMENT 'hive数据库的文件路径', AUTH_DATABASE VARCHAR2(255) COMMENT '验证数据库名称', PERMISSIONS VARCHAR2(255) COMMENT '数据库操作权限', ACCOUNT VARCHAR2(255) COMMENT '账号', PASSWORD VARCHAR2(255) COMMENT '密码', LINK_FLAG BOOLEAN COMMENT '1:已连通,0:未连通', CHECK_TYPE VARCHAR2(255) COMMENT '0:无认证,1:有账号密码的认证,2:Kerberos认证', CREATOR VARCHAR2(255) COMMENT '创建人', IS_AUTO_GENERATION_FLAG VARCHAR2(255) COMMENT '1:是 0:否', CREATOR_NAME VARCHAR2(255) COMMENT '创建人名称', UPDATE_USER VARCHAR2(255) COMMENT '更新人', UPDATE_TIME TIMESTAMP‌ COMMENT '更新时间', DELETE_USER VARCHAR2(255) COMMENT '删除用户', DELETE_TIME TIMESTAMP‌ COMMENT '删除时间', IS_DELETE_FLAG BOOLEAN COMMENT '1:是 0:否', USED BOOLEAN COMMENT '启用标识', IS_PORTAL_REGISTER_FLAG BOOLEAN COMMENT '1:是 0:否', BUSINESS_DOMAIN VARCHAR2(255) COMMENT '业务域', KAFKA_CONFIG MAP COMMENT 'kafka配置', IS_ASSET_CREATE_FLAG VARCHAR2(255) COMMENT '1:是,其它:否', ENCODE_URL VARCHAR2(255) COMMENT '地址(调用统一密码平台接口加密后)', ENCODE_ACCOUNT VARCHAR2(255) COMMENT '账号(调用统一密码平台接口加密后)', ENCODE_PASSWORD VARCHAR2(255) COMMENT '密码(调用统一密码平台接口加密后)', VERSION VARCHAR2(25) COMMENT '版本', CONNECTOR_TYPE VARCHAR2(255) COMMENT '0:关系型数据库连接器,1:非关系型数据库连接器', ICEBERG_CONFIG MAP COMMENT 'iceberg数据源配置项', ICEBERG_DATABASE_LOCATION VARCHAR2(255) COMMENT 'iceberg数据文件路径', REQUEST_SCHEMA VARCHAR2(255) COMMENT '请求模式,用于连接区分, ES: ( https 、http)', TBDS_AUTH_CONFIG MAP COMMENT '0:系统认证;1:人为认证', CREATOR_ID LONG COMMENT '创建人ID', CREATE_TIME TIMESTAMP‌ COMMENT '创建时间', PROVINCE_CODE VARCHAR2(20) COMMENT '附件/信息分类与编码(最新).zip/《南方电网公司信息分类和编码标准 第5分册 人力资源管理类信息分类和编码.doc》中5.2.组织机构编码南方电网公司及二级单位编码', BUREAU_CODE VARCHAR2(20) COMMENT '附件/信息分类与编码(最新).zip/《南方电网公司信息分类和编码标准第5分册 人力资源管理类信息分类和编码. doc》中 5.2.组织机构编码中三级单位编码', CONSTRAINT PK_IM_PRO_DATA_SOURCE PRIMARY KEY (ID, DATA_SOURCE_PHY_PRI_KEY, UNIFIED, PROJECT_ID, CN_NAME, EN_NAME, ORG_NAME) );
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值