有没有更好的写法?

wavestudio 2007-11-27 04:21:08
现在有一个表,其格式为:
EMPNO ENAME JOB MGR BIRTHDAY SAL COMM DEPTNO

其中empno 为员工的编号
ename为员工的姓名
birthday为其生日


现在现在公司为了提高员工的积极性,特地每个月为当月出生的员工过生日,
故需要知道每个月有哪些员工生日,要求即使当月没有过生日的员工,该月也要列出来。现有以下的SQL,
可以满足需要,但觉得不简洁,效率上可能也不高,
各位大虾看一下在这两方面有哪些需要修改的地方:
select a.month,nvl(b.count,0) count from
(select 1 month from dual
union
select 2 month from dual
union
select 3 month from dual
union
select 4 month from dual
union
select 5 month from dual
union
select 6 month from dual
union
select 7 month from dual
union
select 8 month from dual
union
select 9 month from dual
union
select 10 month from dual
union
select 11 month from dual
union
select 12 month from dual
)a,--获得月份列表
(select extract(month from birthday) birmonth,count(empno) count from scott.emp
group by extract(month from birmonth)) b --获得生日月份统计
where a.month=b.birmonth(+)
order by a.month
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Croatia 2007-11-30
  • 打赏
  • 举报
回复
LZ是不是希望,那个月要是没有人过生日的话,希望得到0?
gxlineji 2007-11-29
  • 打赏
  • 举报
回复
不好意思弄错了,上面的已经满足了"即使当月没有过生日的员工,该月也要列出来""

select decode(to_char(HIREDATE,'MM'),'01',1,'02',2,'03',3,'04',4,'05'
,5,'06',6,'07',7,'08',8,'09',9,'10',10,'11',11,'12',12) mon,ename from emp

这样才是不满足"即使当月没有过生日的员工,该月也要列出来"
gxlineji 2007-11-29
  • 打赏
  • 举报
回复
参考
select a.month,nvl(b.ename,0) count from
(select 1 month from dual
union
select 2 month from dual
union
select 3 month from dual
union
select 4 month from dual
union
select 5 month from dual
union
select 6 month from dual
union
select 7 month from dual
union
select 8 month from dual
union
select 9 month from dual
union
select 10 month from dual
union
select 11 month from dual
union
select 12 month from dual
)a,
(select decode(to_char(HIREDATE,'MM'),'01',1,'02',2,'03',3,'04',4,'05'
,5,'06',6,'07',7,'08',8,'09',9,'10',10,'11',11,'12',12) mon,ename from emp) b
where a.month=b.mon(+)
order by a.month

只是不能满足"要求即使当月没有过生日的员工,该月也要列出来"。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧