读书人

-100分求这样的SQL语句(不够再给)-该如

发布时间: 2012-02-16 21:30:36 作者: rapoo

-------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


[解决办法]
insert into TabeB (bzren ,szeren,部门,总人数,非劳人数, 劳人数, 非劳收入, 劳务工收入)
select bzeren ,szeren, depart,count(*) ,
sum(case when lb = '非劳务工 ' then lb end as 非劳人数),
sum(case when lb = '劳务工 ' then lb end as 劳人数 ),
sum(case when lb = '非劳务工 ' then kh_jj end as 非劳收入),
sum(case when lb = '劳务工 ' then kh_jj end as 劳务工收入),
from TableA
group by bzeren ,szeren, depart
order by bzeren,szeren, bdepart

没环境 没经过测试 有不对的麻烦说下
[解决办法]
在case when 中继续限定要求的条件即可。

读书人网 >SQL Server

热点推荐