一道简单的分组合计疑问,求解
时间:2011-12-20
来源:互联网
我用的oracle自带的scott/tiger 表
现在要查询 所有雇员的数量 和 分别在1980,1981,1982,1983(表中没有1983的雇员)加入公司的雇员数量,自设列标题。
我是这样写
SELECT TO_CHAR(hiredate,'YYYY') "YEAR",COUNT(empno)
FROM emp
GROUP BY ROLLUP(TO_CHAR(hiredate,'YYYY'))
ORDER BY TO_CHAR(hiredate,'YYYY');
结果为
YEAR COUNT(empno)
1980 1
1981 10
1982 1
1987 2
14
问题来了,
如果我想出现的结果为
YEAR COUNT(empno)
1980 1
1981 10
1982 1
1983 0
1987 2
14
因为hiredate中是没1983年份进来的员工,所以select出来的结果不可能有1983行的,可不可以让结果里加上1983行的数据,可以的话应该如何写,谢谢
现在要查询 所有雇员的数量 和 分别在1980,1981,1982,1983(表中没有1983的雇员)加入公司的雇员数量,自设列标题。
我是这样写
SELECT TO_CHAR(hiredate,'YYYY') "YEAR",COUNT(empno)
FROM emp
GROUP BY ROLLUP(TO_CHAR(hiredate,'YYYY'))
ORDER BY TO_CHAR(hiredate,'YYYY');
结果为
YEAR COUNT(empno)
1980 1
1981 10
1982 1
1987 2
14
问题来了,
如果我想出现的结果为
YEAR COUNT(empno)
1980 1
1981 10
1982 1
1983 0
1987 2
14
因为hiredate中是没1983年份进来的员工,所以select出来的结果不可能有1983行的,可不可以让结果里加上1983行的数据,可以的话应该如何写,谢谢
作者: airzyc 发布时间: 2011-12-20
楼主,你好
题目:查询分别在1980,1981,1982,1983加入公司的雇员数量
分析:没有1983,需要自定义出这个字段
方案一:建立一个年份表,该表包含所需的所有年份,和查询结果做左连接查询,此方案容易理解,但是需要建表,应该不是楼主本意,故略。
方案二:写纯查询语句罗列年份,和查询结果做左连接查询,这里用到了一个行转列的小技巧,实际上也是将其作为表来使用。
方案二语句如下:
SQL code
题目:查询分别在1980,1981,1982,1983加入公司的雇员数量
分析:没有1983,需要自定义出这个字段
方案一:建立一个年份表,该表包含所需的所有年份,和查询结果做左连接查询,此方案容易理解,但是需要建表,应该不是楼主本意,故略。
方案二:写纯查询语句罗列年份,和查询结果做左连接查询,这里用到了一个行转列的小技巧,实际上也是将其作为表来使用。
方案二语句如下:
SQL code
SELECT x.a years,nvl(y.counts,0) counts FROM (SELECT a FROM (SELECT '1980' a, '1981' b, '1982' c, '1983' d FROM dual) UNION ALL SELECT b FROM (SELECT '1980' a, '1981' b, '1982' c, '1983' d FROM dual) UNION ALL SELECT c FROM (SELECT '1980' a, '1981' b, '1982' c, '1983' d FROM dual) UNION ALL SELECT d FROM (SELECT '1980' a, '1981' b, '1982' c, '1983' d FROM dual)) x, (SELECT TO_CHAR(e.hiredate, 'yyyy') years, COUNT(1) counts FROM emp e WHERE TO_CHAR(e.hiredate, 'yyyy') IN ('1980', '1981', '1982', '1983') GROUP BY TO_CHAR(e.hiredate, 'yyyy')) y WHERE x.a = y.years(+) ORDER BY 1 测试结果: 1 1980 1 2 1981 10 3 1982 1 4 1983 0
作者: asthey 发布时间: 2011-12-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28