sql - 如果结果为空,则选择默认值

标签 sql oracle11g

你好 friend ,我一直在使用这个查询来选择我的 Java 应用程序中的两个字段。

select distinct STU_LEVEL, STU_STREAM from STUDENT_MASTER_TABLE where STATUS_YEAR !=ACADEMIC_YEAR

问题是如果没有数据,应用程序将抛出一个空指针异常。我需要它,如果字段为 Null,则它们默认为 0。我已经用 Coalesce 尝试过这个,但我似乎无法理解它:

select coalesce(distinct (STU_LEVEL,0),  (STU_STREAM, '0')) from STUDENT_MASTER_TABLE where STATUS_YEAR !=ACADEMIC_YEAR

请帮忙。

最佳答案

你只需要像这样使用 COALESCE 两次:

SELECT DISTINCT COALESCE(STU_LEVEL,0), COALESCE(STU_STREAM, '0')
FROM STUDENT_MASTER_TABLE
WHERE STATUS_YEAR !=ACADEMIC_YEAR

如果 STU_Level 为 NULL,这将返回 0,如果 STU_Stream 为 NULL,则返回 0。

SQL Fiddle Demo

针对您的评论,您似乎需要使用 UNION 在未找到任何记录时获得所需的结果:

SELECT DISTINCT COALESCE(STU_LEVEL,0), COALESCE(STU_STREAM, '0')
FROM STUDENT_MASTER_TABLE
WHERE STATUS_YEAR !=ACADEMIC_YEAR
UNION 
SELECT 0,'0' FROM DUAL
WHERE NOT EXISTS (
  SELECT DISTINCT COALESCE(STU_LEVEL,0), COALESCE(STU_STREAM, '0')
  FROM STUDENT_MASTER_TABLE
  WHERE STATUS_YEAR !=ACADEMIC_YEAR
)

还有一个示例 fiddle :http://www.sqlfiddle.com/#!4/29039/1

关于sql - 如果结果为空,则选择默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982043/

相关文章:

sql - 在动态 SQL 中使用局部变量不起作用

java - 如何使用 session 工厂从 Java Hibernate 执行 sql 存储过程?

SQL Server INSERT 性能(SQL、Azure SQL 数据库)

oracle - 查询以显示数据库和数据文件中的所有表空间

java - 从 PL/SQL block 返回值

php - 将所有评论分配给 SQL 中的一篇文章

SQL Server 快进游标

java - 如何使用java备份oracle数据库?

sql - 如何着手优化 Oracle 查询?

java - 通过 JDBC 瘦驱动程序连接 Oracle 11g 时出现问题 (Domino Java)