数据库表 tb_emp
字段:职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
数据: 001 张三 0010 2000 1500 20 3480 3480 2012 1
001 张三 0010 2000 1400 15 3385 3385 2012 2
001 张三 0010 2000 1300 10 3290 3290 2012 3
002 李四 0020 2000 1500 20 3480 3480 2012 1
002 李四 0020 2000 1400 15 3385 3385 2012 2
002 李四 0020 2000 1500 20 3290 3290 2012 3
我想用数据库语句实现下列形式:其中月份需要用户输入需统计的截止月份,比如“1--3”月份: 职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
001 张三 0010 2000 1500 20 3480 3480 2012 1
001 张三 0010 2000 1400 15 3385 3385 2012 2
001 张三 0010 2000 1300 10 3290 3290 2012 3
001 合计 6000 4200 45 10155 10155
002 李四 0010 2000 1500 20 3480 3480 2012 1
002 李四 0010 2000 1400 15 3385 3385 2012 2
002 李四 0010 2000 1300 10 3290 3290 2012 3
002 合计 6000 4200 45 10155 10155
望各位大神不吝赐教,谢谢
字段:职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
数据: 001 张三 0010 2000 1500 20 3480 3480 2012 1
001 张三 0010 2000 1400 15 3385 3385 2012 2
001 张三 0010 2000 1300 10 3290 3290 2012 3
002 李四 0020 2000 1500 20 3480 3480 2012 1
002 李四 0020 2000 1400 15 3385 3385 2012 2
002 李四 0020 2000 1500 20 3290 3290 2012 3
我想用数据库语句实现下列形式:其中月份需要用户输入需统计的截止月份,比如“1--3”月份: 职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
001 张三 0010 2000 1500 20 3480 3480 2012 1
001 张三 0010 2000 1400 15 3385 3385 2012 2
001 张三 0010 2000 1300 10 3290 3290 2012 3
001 合计 6000 4200 45 10155 10155
002 李四 0010 2000 1500 20 3480 3480 2012 1
002 李四 0010 2000 1400 15 3385 3385 2012 2
002 李四 0010 2000 1300 10 3290 3290 2012 3
002 合计 6000 4200 45 10155 10155
望各位大神不吝赐教,谢谢
order by 职工号
compute by sum(档案工资),sum(奖金),sum(应纳税金),sum(实得工资),sum(应发工资合计)
select 职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
(
select 职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月
from tb_temp where 月 between '1' and '3'
union all
select 职工号,'合计',班组名称,sum(档案工资),sum(奖金),sum(应纳税金),sum(实得工资),sum(应发工资合计),'',''
from tb_temp where 月 between '1' and '3'
group by 职工号
)
order by 职工号
insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values (001 ,'张三', 0010 ,2000 ,1500 ,20 ,3480, 3480, 2012, 1)
insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values (001 ,'张三', 0010 ,2000, 1400, 15 ,3385 ,3385, 2012, 2)
insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values (001 ,'张三',0010 ,2000 ,1300 ,10, 3290 ,3290, 2012 ,3)
insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values ( 002 ,'李四', 0020, 2000 ,1500, 20, 3480, 3480, 2012, 1)
insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values ( 002, '李四' ,0020, 2000 ,1400, 15 ,3385, 3385, 2012 ,2)
insert into #temp (职工号,姓名,班组名称,档案工资,奖金,应纳税金,实得工资,应发工资合计,年, 月) values ( 002 ,'李四', 0020 ,2000, 1500 ,20, 3290 ,3290 ,2012, 3)
SELECT 职工号,姓名,班组名称,
SUM(档案工资) AS 合计档案工资 ,
SUM(奖金) AS 合计奖金,
SUM(应纳税金) AS 合计应纳税金,
SUM(实得工资) AS 合计实得工资,
SUM(应发工资合计) AS 应发工资总计
FROM #temp
WHERE 年='2012' AND 月 BETWEEN 1 AND 3
GROUP BY 职工号,姓名,班组名称
--> 测试数据:[tb_emp]
if object_id('[tb_emp]') is not null drop table [tb_emp]
create table [tb_emp](
[职工号] varchar(3),
[姓名] varchar(4),
[班组名称] varchar(4),
[档案工资] int,
[奖金] int,
[应纳税金] int,
[实得工资] int,
[应发工资合计] int,
[年] int,
[月] int
)
insert [tb_emp]
select '001','张三','0010',2000,1500,20,3480,3480,2012,1 union all
select '001','张三','0010',2000,1400,15,3385,3385,2012,2 union all
select '001','张三','0010',2000,1300,10,3290,3290,2012,3 union all
select '002','李四','0020',2000,1500,20,3480,3480,2012,1 union all
select '002','李四','0020',2000,1400,15,3385,3385,2012,2 union all
select '002','李四','0020',2000,1500,20,3290,3290,2012,3select * from [tb_emp]
union all
select 职工号,姓名='合',班组名称='计',sum(档案工资) 档案工资,
sum(奖金) 奖金,sum(应纳税金) 应纳税金,sum(实得工资) 实得工资,
sum(应发工资合计) 应发工资合计,年,月=''
from [tb_emp]
group by [职工号],[姓名],[班组名称],年
order by 职工号,档案工资
/*
职工号 姓名 班组名称 档案工资 奖金 应纳税金 实得工资 应发工资合计 年 月
001 张三 0010 2000 1500 20 3480 3480 2012 1
001 张三 0010 2000 1400 15 3385 3385 2012 2
001 张三 0010 2000 1300 10 3290 3290 2012 3
001 合 计 6000 4200 45 10155 10155 2012 0
002 李四 0020 2000 1500 20 3480 3480 2012 1
002 李四 0020 2000 1400 15 3385 3385 2012 2
002 李四 0020 2000 1500 20 3290 3290 2012 3
002 合 计 6000 4400 55 10155 10155 2012 0
*/
(
empid varchar(3),
empname varchar(10),
classname varchar(5),
basic_salary money,
rewards money,
tax money,
final_salary money,
salary_out money,
syear varchar(4),
smonth int
)
insert into emp_salary
select '001', 'ZS' ,'0010' ,2000, 1500, 20, 3480, 3480, '2012', 1 union all
select '001', 'ZS', '0010' ,2000, 1400, 15, 3385, 3385, '2012', 2 union all
select '001', 'ZS' ,'0010', 2000, 1300, 10, 3290, 3290, '2012', 3 union all
select '002', 'LS' ,'0020', 2000, 1500, 20, 3480, 3480, '2012', 1 union all
select '002', 'LS' ,'0020', 2000, 1400, 15, 3385, 3385, '2012', 2 union all
select '002', 'LS' ,'0020', 2000, 1500, 20, 3290, 3290, '2012', 3
select * from
(
select empid,empname,classname,basic_salary,rewards,tax,final_salary,salary_out,syear, smonth
from emp_salary where smonth between 1 and 3
union all
select empid,'Total',classname,sum(basic_salary),sum(rewards),sum(tax),sum(final_salary),sum(salary_out),null,null
from emp_salary where smonth between 1 and 3
group by empid,classname
) as q
order by empid,syear desc
union all
select 职工号,姓名='合',班组名称='计',sum(档案工资) 档案工资,
sum(奖金) 奖金,sum(应纳税金) 应纳税金,sum(实得工资) 实得工资,
sum(应发工资合计) 应发工资合计,年,月=''
from [tb_emp]
where year=2011 and month between 7 and 12 or year=2012 and month between 1 and 3
group by [职工号],[姓名],[班组名称],年
order by 职工号,档案工资