欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

求统计有关问题答案:行列置换升级版

更新时间: 2014-01-05 02:14:00 责任编辑: Author_N1

 

求统计问题答案:行列置换升级版
有一个部门表:dept(deptid,deptname,deptpid)
deptid部门主键;
deptname部门名称;
deptpid部门父id;


有一个数据表people(peopleid,deptid,peopletype)
peopleid主键;
deptid部门id;
peopletype人员类型有四种:typeA,typeB,typeC,typeD;


现在想统计每个部门下不同人员类型的总量;

测试数据:
deptid deptname deptpid
1 部门一 0
2 部门二 1
3 部门三 1
4 部门四 1
5 部门五 2
1
-----------------
2 3 4
       ---
5
peopleid deptid peopletype
1 1 typeA
2 2 typeB
3 3 typeC
4 4 typeD
5 5 typeB
6 2 typeB


想得到结果如:

deptid deptname typeA typeB typeC typeD
1 部门一 1 3 1 1

然后再根据deptid得到如下结果:
deptid deptname typeA typeB typeC typeD
2 部门二 0 3 0 0
3 部门三 0 0 1 0
4 部门四 0 0 0 1

然后再根据传入的deptid得到如下结果(分两种情况):
①如果传入的deptid是2则结果是:
deptid deptname typeA typeB typeC typeD
5 部门五 0 1 0 0
②如果传入的deptid是3则没有查询结果



不知道怎么统计,首先先多谢大家。。。。
--参考方法--

DROP TABLE dept;
CREATE TABLE dept(deptid NUMBER,deptname nvarchar2(20),deptpid NUMBER);

INSERT INTO dept
select 1 deptid,'部门一' deptname, 0 deptpid from dual
union all select 2,'部门二', 1   from dual
union all select 3,'部门三', 1  from dual
union all select 4,'部门四', 1  from dual
union all select 5,'部门五', 2  from dual;

DROP TABLE people;
CREATE TABLE people(peopleid NUMBER,deptid NUMBER,peopletype NVARCHAR2(20));

INSERT INTO people
select 1 peopleid,1 deptid,'typeA' peopletype from dual
union all select 2,2,'typeB' from dual
union all select 3,3,'typeC' from dual
union all select 4,4,'typeD' from dual
union all select 5,5,'typeB' from dual
union all select 6,2,'typeB' from dual;

COMMIT;

SELECT deptid,deptname
,SUM(NVL(CASE WHEN peopletype='typeA' THEN 1 ELSE 0 END,0)) AS typeA
,SUM(NVL( CASE WHEN peopletype='typeB' THEN 1 ELSE 0 END,0)) AS typeB
,SUM(NVL( CASE WHEN peopletype='typeC' THEN 1 ELSE 0 END,0)) AS typeC
,SUM(NVL( CASE WHEN peopletype='typeD' THEN 1 ELSE 0 END,0)) AS typeD
FROM
(
SELECT a.deptid,deptname,peopletype,COUNT(*)
FROM dept a
LEFT JOIN people b
ON a.deptid=b.deptid
GROUP BY a.deptid,deptname,peopletype
) t
GROUP BY deptid,deptname
ORDER BY deptid;


最后传入值的部分没看懂,楼主自己修改吧
--参考方法--
这个用一个sql统计不出来,可以使用存储过程将结果输出到临时表中,然后在检索临时表
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:14:00
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7290/
本文WWW.DOC100.NET DOC100.NET版权所有。