关于一个常用的汇总效果的实现方法

本文介绍了一种使用SQL实现数据汇总的方法,通过具体实例展示了如何在不增加太多复杂性的情况下完成部门级别的员工信息汇总。

 最近在做报表类的简单开发,有个很实用的汇总效果,但我一直没去那样实现,今天有点闲空就想研究下到底怎么能很好的实现.我用了一个很笨拙的方法勉强实现了,思路是先在SQL里查找,然后在WEB端显示。

先说下我想达到的效果:
比如有个表:
employeeid  employeename  depid   depname  salary  degree  age  remark
001            张三                  001      IT部       3000    本科   21    备注1
002            李四                  001      IT部       4000    本科   25    备注2
003            王五                  003     招聘部       3000    本科   21    备注3
004            老六                  003     招聘部       4000    本科   23    备注4
005            老七                  002     财务部       5000    本科   21    备注5
006            老八                  002     财务部       2000    本科   21    备注6
007            老九                  002     财务部       3000    本科   21    备注7
我想经过筛选后在UI层显示为:
部门      员工号       姓名      工资      学历         年龄         备注
IT部       001            张三      3000         本科         21            备注1
IT部       002            李四      4000         本科         25            备注2
IT部       小计                                                                           2
财务部    005            老七      5000         本科         21            备注5
财务部    006            老八      2000         本科         21            备注6
财务部    007            老九      3000         本科         21            备注7
财务部    小计                                                                          3
招聘部    003            王五      3000         本科         21            备注3
招聘部    004            老六      4000         本科         23            备注4
招聘部    小计                                                                          2
总计                                                                                           7 

实现SQL如下:

create table A(employeeid varchar(10),employeename varchar(10),depid varchar(10)

       ,depname varchar(10),salary int,degree varchar(10),age int,remark varchar(10))

insert into A select '001','张三','001','IT部','3000','本科','21','备注1'

insert into A select '002','李四','001','IT部','4000','本科','25','备注2'

insert into A select '003','王五','003','招聘部','3000','本科','21','备注3'

insert into A select '004','老六','003','招聘部','4000','本科','23','备注4'

insert into A select '005','老七','002','财务部','5000','本科','21','备注5'

insert into A select '006','老八','002','财务部','2000','本科','21','备注6'

insert into A select '007','老九','002','财务部','3000','本科','21','备注7'

go

 

select * from

(

SELECT        CASE WHEN (GROUPING(depname) = 1) THEN '总计'

              ELSE ISNULL(depname, 'UNKNOWN') END AS depname

       ,isnull(convert(char(10),employeeid,120),'小计') as employeeid

       ,depid,employeename,salary,degree,age,remark,count(employeeid) as num

FROM A

group by depname,employeeid,depid,employeename,salary,degree,age,remark

with rollup

) B

where B.remark is not null or B.employeeid='小计'

 

go

 

drop table A

go

 

drop table A

go

 

效果如下:

/*

IT部      001           001 张三       3000       本科       21    备注1     1

IT部      002           001 李四       4000       本科       25    备注2     1

IT部      小计          NULL     NULL     NULL     NULL     NULL     NULL     2

财务部    005           002 老七       5000       本科       21    备注5     1

财务部    006           002 老八       2000       本科       21    备注6     1

财务部    007           002 老九       3000       本科       21    备注7     1

财务部    小计          NULL     NULL     NULL     NULL     NULL     NULL     3

招聘部    003           003 王五       3000       本科       21    备注3     1

招聘部    004           003 老六       4000       本科       23    备注4     1

招聘部    小计          NULL     NULL     NULL     NULL     NULL     NULL     2

总计       小计          NULL     NULL     NULL     NULL     NULL     NULL     7

*/

效果基本上就这样,但感觉这种方法挺笨的,而且数据量一旦多了可能会慢,又没想到什么更好的方法。就当抛个砖,希望大家给出更好的方法。比如是不是可以考虑不必在SQL中就汇总成这个效果,而是筛选后在WEB端将明细表和汇总表通过datatable合并等方法。

转载于:https://www.cnblogs.com/gaozhongfa/archive/2007/08/03/841539.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值