oracle查询语句怎样将表中没有的数据显示为0

比如说cj表是学生成绩表,里面有成绩一列,数据都是75以上,我要形成如下结果成绩人数<60070-80580-905后两行没问题,但<60那一行怎么写... 比如说cj表是学生成绩表,里面有成绩一列,数据都是75以上,我要形成如下结果
成绩 人数
<60 0
70-80 5
80-90 5
后两行没问题,但<60那一行怎么写
展开
 我来答
yuanzai32
推荐于2017-05-21 · TA获得超过114个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:118万
展开全部
如果只是缺少个别指标,完全可以参照楼上的Union all
如果缺少的指标比较多,则建议用创造编码表的方式解决
创建编码表t1
id name
1 80-90
2 70-80
3 <60
select t1.name, nvl(t2.user_count, 0)
from t1,
(select case
when cj > 80 and cj <= 90 then
'1'
when cj > 70 and cj <= 80 then
'2'
when cj > 70 and cj < 60 then
'3'
else
null
end id,
count(distinct 学生ID) user_count
from 成绩表) t2
where t1.id = t2.id(+)
最恨芹菜
2014-01-07 · TA获得超过110个赞
知道答主
回答量:106
采纳率:0%
帮助的人:76.9万
展开全部
NVL 函数可以满足你。
格式为:
NVL( string1, replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时子凉
2014-01-07
知道答主
回答量:6
采纳率:0%
帮助的人:5.3万
展开全部
用union。
select XX AS 成绩,XX AS 人数
union
select ‘<60’ AS 成绩, 0 AS 人数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HaiziCattle
2014-01-07 · TA获得超过125个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:192万
展开全部
select t.minR,t.maxR,count(*)
from (select 0 minR ,60 maxR from dual union
select 70 minR ,80 maxR from dual union
select 80 minR ,90 maxR from dual ) t
left join cj
on cj.cj >= t.minR and cj.cj < t.maxR
group by t.minR,t.maxR
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式