-------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或存储过程?
已经提出贴子了:
http://community.csdn.net/Expert/topic/5581/5581718.xml?temp=.6187555
高手的回复如下;
select bzeren,szeren,bdepart,Count(distinct name) as 总人数,
isnull(sum(case when lleibie=N '在岗职工 ' then 1 end),0) as 在岗职工人数,
isnull(sum(case when lleibie=N '聘用工 ' then 1 end),0) as 聘用工人数,
isnull(sum(case when lleibie=N '劳务工 ' then 1 end),0) as 劳人数,
isnull(sum(case when lleibie=N '在岗职工 ' or lleibie=N '聘用工 ' then kh_jj end),0) as 非劳收入,
isnull(sum(case when lleibie=N '劳务工 ' then kh_jj end),0) as 劳务工收入
from zeren
group by bzeren,szeren,bdepart
order by bzeren,szeren,bdepart
但是有错误呀!光用
sum(case when lb=N '非劳务工 ' then 1 end) as 非劳人数
是不对的.因为总人数是用count(distinct name)统计的,