视图可以这样建: -测试数据: create table 人员调动表(调动号 varchar(20),员工号 varchar(20),调前部门号 varchar(20),调后部门号 varchar(20),调前职位号 varchar(20),调后职位号 varchar(20))insert 人员调动表 select '001','00001','0001','0003','0002','0005'create table 部门表(部门号 varchar(20),部门名 varchar(20))insert 部门表 select '0001','aaaa' union all select '0003','bbbb'create table 员工表(员工号 varchar(20),员工名 varchar(20))insert 员工表 select '00001','aa' union all select '00002','bb'create table 职位表(职位号 varchar(20),职位名 varchar(20))insert 职位表 select '0002','aaa' union all select '0005','bbb' -创建视图 create view vw_test as select a.调动号,a.员工号,b.员工名,c.部门名 as 调前部门名,d.部门名 as 调后部门名,e.职位名 as 调前职位名,f.职位名 as 调后职位名 from 人员调动表 a,员工表 b,部门表 c,部门表 d,职位表 e,职位表 f where a.员工号=b.员工号 and a.调前部门号=c.部门号 and a.调后部门号=d.部门号 and a.调前职位号=e.职位号 and a.调后职位号=f.职位号你在查询分析器里边试试,我测试过了,没有问题!
结帐了,还是帖出来吧,不知道你还能不能看到 create table T_wage(EmployeeNo varchar(20),MonthNo varchar(20),YearNo varchar(20),DeptNo varchar(20),WageCount int)insert T_wage select '001','6','2004','001',2000 union all select '001','7','2004','001',1800 union all select '003','6','2004','001',1600 union all select '004','8','2004','002',2100 --然后用动态sql语句 declare @sql varchar(2000) set @sql='select DeptNo' select @sql=@sql+',isnull(sum(case when MonthNo='''+MonthNo+''' then WageCount end),0) ['+MonthNo+']' from (select distinct MonthNo from T_wage) as a select @sql=@sql+',sum(WageCount) as totalCount from T_wage group by DeptNo' exec (@sql)
-测试数据:
create table 人员调动表(调动号 varchar(20),员工号 varchar(20),调前部门号 varchar(20),调后部门号 varchar(20),调前职位号 varchar(20),调后职位号 varchar(20))insert 人员调动表
select '001','00001','0001','0003','0002','0005'create table 部门表(部门号 varchar(20),部门名 varchar(20))insert 部门表
select '0001','aaaa'
union all
select '0003','bbbb'create table 员工表(员工号 varchar(20),员工名 varchar(20))insert 员工表
select '00001','aa'
union all
select '00002','bb'create table 职位表(职位号 varchar(20),职位名 varchar(20))insert 职位表
select '0002','aaa'
union all
select '0005','bbb'
-创建视图
create view vw_test as
select a.调动号,a.员工号,b.员工名,c.部门名 as 调前部门名,d.部门名 as 调后部门名,e.职位名 as 调前职位名,f.职位名 as 调后职位名
from 人员调动表 a,员工表 b,部门表 c,部门表 d,职位表 e,职位表 f
where a.员工号=b.员工号 and a.调前部门号=c.部门号 and a.调后部门号=d.部门号 and a.调前职位号=e.职位号 and a.调后职位号=f.职位号你在查询分析器里边试试,我测试过了,没有问题!
还有个问题 麻烦大家看下~~!
是个工资表的
员工号 月份 年份 部门号 应发金额
001 6 2004 001 2000
001 7 2004 001 1800
003 6 2004 001 1600
004 8 2004 002 2100
请问这个怎么用查询语句生成报表
部门名 1月 2月 3月 4月.....12月 小计
aaa 8000 4000 6000 5000 12000 80000谢谢麻烦大家也看看哦 !我现在还搞不懂 怎么办那个6月 7月字段值变成 要查询表的列~~
create table T_wage(EmployeeNo varchar(20),MonthNo varchar(20),YearNo varchar(20),DeptNo varchar(20),WageCount int)insert T_wage
select '001','6','2004','001',2000
union all
select '001','7','2004','001',1800
union all
select '003','6','2004','001',1600
union all
select '004','8','2004','002',2100
--然后用动态sql语句
declare @sql varchar(2000)
set @sql='select DeptNo'
select @sql=@sql+',isnull(sum(case when MonthNo='''+MonthNo+''' then WageCount end),0) ['+MonthNo+']'
from (select distinct MonthNo from T_wage) as a
select @sql=@sql+',sum(WageCount) as totalCount from T_wage group by DeptNo'
exec (@sql)