日期:2014-05-19  浏览次数:20522 次

-------100分求这样的SQL语句(不够再给)------
zeren表TableA结构如下:

bzeren(char)     szeren(c)   depart(c)   name(c)       lb(c)           kh_jj(float)   khlb(c)
大责任一             A小责任一       depa         姓名一         非劳务工     1200                 月奖金
大责任一             A小责任一       depa         姓名一         非劳务工     4800                 月工资
大责任一             A小责任一       depb         姓名二         劳务工         600                   月工资
大责任一             A小责任二       depc         姓名三         非劳务工     1400                 月工资
大责任二             B小责任一       depe         姓名四         劳务工         200                   月工资
.....
大责任N               N小责任n         depn         姓名n             劳务工         700                 额外奖励

-----------------------------------
现在想提取数据形成以下格式的表TableB(用来做报表)
-----------------------------------

bzren           szeren           部门       总人数   非劳人数   劳人数   非劳收入   劳务工收入
大责任一     A小责任一     depa
大责任一     A小责任n       depb
..
大责任N       N小责任n       depc

------------------------------------
其中TableB的bzeren、szeren、bdepart是用要求唯一的.即用下语句可以形成这三列
select   bzeren,szeren,bdepart   from   zeren  
group   by   bzeren,szeren,bdepart  
order   by   bzeren,szeren,bdepart

但是还要对TableB的后五列对应统计数据更新TableB
请问如何写这条SQL或存储过程?



------解决方案--------------------
select bzeren,szeren,bdepart,Count(distinct name) as 总人数,
sum(case when lb=N '非劳务工 ' then 1 end) as 非劳人数,
sum(case when lb=N '劳务工 ' then 1 end) as 劳人数,
sum(case when lb=N '非劳务工 ' then kh_jj end) as 非劳收入,
sum(case when lb=N '劳务工 ' then kh_jj end) as 劳务工收入

from zeren
group by bzeren,szeren,bdepart
order by bzeren,szeren,bdepart
------解决方案--------------------
查询楼上正解,若要更新不如用楼上一起插入 insert tableB select ...
------解决方案--------------------
update xxx set 非劳务工 '=b.非劳人数
from xxx a inner join (
select bzeren,szeren,bdepart,Count(distinct name) as 总人数,
sum(case when lb=N '非劳务工 ' then 1 end) as 非劳人数,
sum(case when lb=N '劳务工 ' then 1 end) as 劳人数,
sum(case when lb=N '非劳务工 ' then kh_jj end) as 非劳收入,
sum(case when lb=N '劳务工 ' then kh_jj end) as 劳务工收入

from zeren
group by bzeren,szeren,bdepart )b
on a.bzeren=b.bzerenand a.szeren=b.szerenand a.bdepart=b.bdepart