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

-------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)统计的,