求个 SQL 多表、分组汇总合计的 语句
统计源表和需要统计的结果集请详见附图说明:1、为了大家一目了然看清楚我的两张表的结构,我特意把所有字段名称改为了中文2、按专业级别、专业名称分组统计3、统计结果中的“计划...
统计源表 和需要统计的 结果集 请详见附图
说明:
1、为了大家一目了然看清楚我的两张表的结构,我特意把所有字段名称改为了中文
2、按专业级别、专业名称分组统计
3、统计结果中的“计划人数”,就是专业表“TB_Profession”里的【计划人数】字段,照搬过来就行(也就是这一步我没做出来)
4、统计结果中的“报名人数”,是所有报名的人数,需要解释一下:学生报名以后,让【学生编号】字段的内容默认为“X”,而通过了审核的,就给一个编号,如“X20120001”,也就是说,【学生编号】只有“X”的,只是预约成功的学生,并没有审核,但无论学生表“TB_Student”中【学生编号】字段为什么内容(长度为 1 或 9),都要算在“报名人数”里。“审核人数”,就是【学生编号】形于“X20120001”的人数,只有“X”的不算。
5、由专业表“TB_Profession”可以看出来,同一个专业名称,是可以有不同级别的,所以,一定要按“专业级别”和“专业名称”分组的原因就在此。
6、对于第 5 条 说明,补充一下,既然按分组了,就一定要合计,合计就是后面所有列相对应计算出总人数,但最重要的是:每个“专业级别”合计一次(这个我也更没做出来)
我只要一个 SQL 语句就行,不需要其他的程序;无需考虑表格的表头、表格样式,这些我自己来设计和绘制,我要的是,能统计出 附图中的结果 的 SQL 语句。
请各位前辈指导一下,如果统计结果正确,高分酬谢! 展开
说明:
1、为了大家一目了然看清楚我的两张表的结构,我特意把所有字段名称改为了中文
2、按专业级别、专业名称分组统计
3、统计结果中的“计划人数”,就是专业表“TB_Profession”里的【计划人数】字段,照搬过来就行(也就是这一步我没做出来)
4、统计结果中的“报名人数”,是所有报名的人数,需要解释一下:学生报名以后,让【学生编号】字段的内容默认为“X”,而通过了审核的,就给一个编号,如“X20120001”,也就是说,【学生编号】只有“X”的,只是预约成功的学生,并没有审核,但无论学生表“TB_Student”中【学生编号】字段为什么内容(长度为 1 或 9),都要算在“报名人数”里。“审核人数”,就是【学生编号】形于“X20120001”的人数,只有“X”的不算。
5、由专业表“TB_Profession”可以看出来,同一个专业名称,是可以有不同级别的,所以,一定要按“专业级别”和“专业名称”分组的原因就在此。
6、对于第 5 条 说明,补充一下,既然按分组了,就一定要合计,合计就是后面所有列相对应计算出总人数,但最重要的是:每个“专业级别”合计一次(这个我也更没做出来)
我只要一个 SQL 语句就行,不需要其他的程序;无需考虑表格的表头、表格样式,这些我自己来设计和绘制,我要的是,能统计出 附图中的结果 的 SQL 语句。
请各位前辈指导一下,如果统计结果正确,高分酬谢! 展开
展开全部
select a.专业级别,a.专业名称,b.计划人数,sum(case when 学生编号='X' then 1 else 0 end) 报名人数,sum(case when 学生编号<>'X' then 1 else 0 end) 审核人数,
sum(case when 住址='长沙' then 1 else 0 end) 长沙,
sum(case when 住址='望城' then 1 else 0 end) 望城,
sum(case when 住址='宁乡' then 1 else 0 end) 宁乡,
sum(case when 住址='浏阳' then 1 else 0 end) 浏阳,
sum(case when 性别='男' then 1 else 0 end) 男,
sum(case when 性别='女' then 1 else 0 end) 女,
from
TB_Student a,TB_Profession b
where a.专业级别=b.专业级别 and a.专业名称=b.专业名称
group by a.专业级别,a.专业名称,b.计划人数
sum(case when 住址='长沙' then 1 else 0 end) 长沙,
sum(case when 住址='望城' then 1 else 0 end) 望城,
sum(case when 住址='宁乡' then 1 else 0 end) 宁乡,
sum(case when 住址='浏阳' then 1 else 0 end) 浏阳,
sum(case when 性别='男' then 1 else 0 end) 男,
sum(case when 性别='女' then 1 else 0 end) 女,
from
TB_Student a,TB_Profession b
where a.专业级别=b.专业级别 and a.专业名称=b.专业名称
group by a.专业级别,a.专业名称,b.计划人数
更多追问追答
追问
您好,您的 SQL 语句可以查询成功,而且是正确的结果,但是怎么添加每个类别下面那个“合计”行
追答
这个最好用程序代码分步处理:
按专业级别对以上结果分组,再插入以上结果中
展开全部
我只写一项的汇总啊,别的么照着一样写就好了。就写计划人数
select case when 专业级别 is null then N'总计' else 专业级别 end ,case when 专业名称 is null and 专业级别 is not null then N'合计' else 专业名称 end ,sum(计划人数)
from TB_professional
group BY 专业级别,专业名称
with rollup
select case when 专业级别 is null then N'总计' else 专业级别 end ,case when 专业名称 is null and 专业级别 is not null then N'合计' else 专业名称 end ,sum(计划人数)
from TB_professional
group BY 专业级别,专业名称
with rollup
追问
您好,您的代码,有统计,符合客户的要求,不过我加了代码以后,出现两个问题:
1、计划人数,不给合计,显示NULL
2、每个专业都会有重复的结果出来
您看一下我写的SQL的结果附图
追答
有null,可能因为你的计划人数有的部门是空的!那个sum里面加 ISnull的语句。sum( ISnull(计划人数,0))
然后将pro_plan从groupby 的后面拿掉,不需要按着那个分组啊!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
貌似已解决了我就不搀和了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询