Oracle 当前条件没有返回数据,如何让它某个字段返回一个0?

select t1.curr_deal curr_deal1,

t1.kpi_value value1,
t2.curr_deal curr_deal2,
decode(t2.kpi_value,null,0,t2.kpi_value) value2,
t3.curr_deal curr_deal3,
decode(t3.kpi_value,null,0,t3.kpi_value) value3
from (select curr_deal, dms_cl, kpi_id, sum(kpi_value) kpi_value
from LV1 where kpi_id = 159
group by curr_deal, dms_cl, kpi_id) t1,
(select curr_deal, dms_cl, kpi_id, sum(kpi_value) kpi_value
from LV1 where kpi_id = 159
group by curr_deal, dms_cl, kpi_id) t2,
(select curr_deal, dms_cl, kpi_id, sum(kpi_value) kpi_value
from LV1 where kpi_id = 159
group by curr_deal, dms_cl, kpi_id) t3
where t1.kpi_id = t2.kpi_id
and t1.kpi_id = '159'
and t1.kpi_id = t3.kpi_id
and t1.dms_cl = t2.dms_cl
and t1.dms_cl = '1010259'
and t1.dms_cl = t3.dms_cl
and t1.curr_deal between 20141107 and 20141202
and t2.curr_deal =
to_char(to_date(t1.curr_deal, 'yyyymmdd') - 1, 'yyyymmdd')
--and t3.curr_deal =
to_char(add_months(to_date(t1.curr_deal, 'yyyymmdd'), -1),
'yyyymmdd')
order by t1.curr_deal) t;
这是我的sql,求助各位,三张表联查,日期分别为今日,昨日,上月今日,但是有的时候昨日和上月没有数据的话,今天的值也查不出来了,所以想让没有数据的时候值返回一个0(没数据的时候是一整条都没有,不单是值的字段没有)。nvl也试过了,没成功。。谢谢各位!!!

第1个回答  2014-12-03
您好,提问者:
1、我看你是用了decode函数做判断的,既然显示字段是固定的,那么就可以decode函数。
2、另外如果涉及左右连接,那么也可以采取left join 和 right join来进行操作。本回答被网友采纳

oracle数据库 查不到数据则显示零
你可以是空记录,但如果本身字段就无任何值,连null都没有,那就根本无法返回值 至少你该条记录有个序号之类的 select nvl(a.qty,0) from table a where a.no='12345,但你可以写存储过程,当无法查找到记录时返回值

ORACLE 如果一个字段包含指定的值 那么另一个字段就返回为1 否则为0
(case when instr (x,'a')>0 or instr (x,'b')>0 or instr (x,'c')>0 then 1 else 0 end)from r 大概是这个意思。

oracle根据字段是否为null添加筛选条件
是。Oracle认为结果为NULL的条件为FALSE,带有这样条件的select语句不返回行,并且不返回错误信息。在oracle数据库中,空值用来表示实际值未知或无意义的情况.,在一个表中,如果一行中的某列没有值,那么就称它为空值NULL。

oracle怎么让一个字段不同条件下的值展示出来
Oracle让一个字段不同条件下的值展示出来用out返回参数。Oracle让一个字段不同条件下的值展示出来用out返回参数,字段值用符号拼接起来后返回到匿名块,改变字段的distinct关键字的条件out返回参数即可。Oracle是甲骨文公司推出的一款关系数据库管理系统。代码是一组由字符符号或信号码元以离散形式表示信息的...

如何批量修改oracle数据库中某一个表中的某一列数据?
如果是误操作,最好还是请DBA来恢复,虽然这样做会被挨骂,但总比错上加错,最后连挨骂的机会都没有要好得多。如果对这些修改真的有信心,而只是从性能考虑,那可以用下面的方法(pk_col 是表的主键 1、构建临时表进行主键关联更新 需求:T1表有千万级别的数据量,需要更新这个表的字段a,b满足2个...

oracle怎么改某个字段下所有的值
1. update 表名 set 字段='值' where 条件;如test表中有如下数据:现在要将ID=3的这条数据的NAME改成badkano,可用如下语句:1. update test set NAME='badkano' where ID=3;2. commit;运行后的结果:说明:update语句执行后,必须commit来提交,否则只在当前session中有效。

Oracle函数问题,报(ORA-01422: 实际返回的行数超出请求的行数_百度知...
1.where staff_vs_group.emp_no = staff_dict.emp_no and rownum=1;这个符合这个条件的记录不止一行,而且很多行 2.而distinct只能把同一字段相同内容的删掉,不同内容的不会删掉。3.select into是隐式游标,只能传一个内容进去 4.当加上rownum=1,就是选取了第一行,也就是说只是一行,肯定不...

如何在Oracle数据库查询中为没有数据的字段赋值为NULL?
也就是 如果成绩为0,那么返回 NULL, 否则就返回成绩。甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司。2017年6月7日...

如何在SQL语句中返回一个字段存在,另一个不存在?
首先,在SQL中(以SQL Server为例),查询存在一个表而不在另一个表中的数据记录的方法有很多,介绍其中4种:1、方法一(仅适用单个字段):使用 not in ,比较容易理解,缺点是效率低 如:select A.ID from A where A.ID not in (select ID from B);2、方法二(适用多个字段匹配):使用 left...

oracle 某个字段的结果是一个集合,怎么知道这个结果中是否有某个值
PL\/SQL中是没有数组的概念,他的集合数据类型和数组是相似的,所以可以用ARRAY来解决问题。第一步:创建你所需的ARRAY类型 Create Type varray_answer as varray(10) of varchar2(50);第二步:把你的sf_split_string函数返回的类型设置为varray_answer 第三步:select era_id, us_id, sf_split_...

相似回答