如果result为null,请选择默认值

时间:2013-02-20 14:17:38

标签: sql oracle11g

朋友们,我一直在使用此查询在我的Java应用程序中选择两个字段。

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

问题是如果没有数据,应用程序抛出一个空指针Exception。我需要它,如果字段是Null,那么它们默认为0.我用Coalesce尝试了这个但是我似乎无法得到它:

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

请帮忙。

1 个答案:

答案 0 :(得分:5)

你需要像这样两次使用COALESCE

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

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

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
)

一个样本小提琴:http://www.sqlfiddle.com/#!4/29039/1