oracle查询语句怎样将表中没有的数据显示为0
比如说cj表是学生成绩表,里面有成绩一列,数据都是75以上,我要形成如下结果成绩人数<60070-80580-905后两行没问题,但<60那一行怎么写...
比如说cj表是学生成绩表,里面有成绩一列,数据都是75以上,我要形成如下结果
成绩 人数
<60 0
70-80 5
80-90 5
后两行没问题,但<60那一行怎么写 展开
成绩 人数
<60 0
70-80 5
80-90 5
后两行没问题,但<60那一行怎么写 展开
4个回答
展开全部
如果只是缺少个别指标,完全可以参照楼上的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(+)
如果缺少的指标比较多,则建议用创造编码表的方式解决
创建编码表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(+)
展开全部
NVL 函数可以满足你。
格式为:
NVL( string1, replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换。
格式为:
NVL( string1, replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用union。
select XX AS 成绩,XX AS 人数
union
select ‘<60’ AS 成绩, 0 AS 人数
select XX AS 成绩,XX AS 人数
union
select ‘<60’ AS 成绩, 0 AS 人数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询