题号 题型 姓名 部门 年份
1 选择题 人四 人力资源部 2010
2 填空题 人四 人力资源部 2010
3 问答题 人四 人力资源部 2010
4 问答题 人四 人力资源部 2010
5 选择题 销三 销售部 2010
6 填空题 销三 销售部 2010
7 判断题 销三 销售部 2010
8 选择题 销四 销售部 2009
9 填空题 销四 销售部 2009
10 叙述题 销四 销售部 2009表 成绩 题号与题库中的题号对应题号 成绩
1 2
2 3
3 1
4 10
5 10
6 5
7 10
8 5
9 12
10 5
想查到如下表结构
当查看人力资源部的时候
选择题 填空题 问答题 总分 姓名 部门 年份
2 3 1 6 人四 人力资源部 2010
查销售部的时候
选择题 填空题 判断题 总分 姓名 部门 年份
10 5 10 20 销三 销售部 2010
可以根据部门与年份,自动增减表头在程序调入存储过程时,需要给存储过程3个参数,年份、部门、姓名 能帮帮忙吗?
1 选择题 人四 人力资源部 2010
2 填空题 人四 人力资源部 2010
3 问答题 人四 人力资源部 2010
4 问答题 人四 人力资源部 2010
5 选择题 销三 销售部 2010
6 填空题 销三 销售部 2010
7 判断题 销三 销售部 2010
8 选择题 销四 销售部 2009
9 填空题 销四 销售部 2009
10 叙述题 销四 销售部 2009表 成绩 题号与题库中的题号对应题号 成绩
1 2
2 3
3 1
4 10
5 10
6 5
7 10
8 5
9 12
10 5
想查到如下表结构
当查看人力资源部的时候
选择题 填空题 问答题 总分 姓名 部门 年份
2 3 1 6 人四 人力资源部 2010
查销售部的时候
选择题 填空题 判断题 总分 姓名 部门 年份
10 5 10 20 销三 销售部 2010
可以根据部门与年份,自动增减表头在程序调入存储过程时,需要给存储过程3个参数,年份、部门、姓名 能帮帮忙吗?
set @dept='人力资源部'
select @sql=isnull(@sql+',','')+'sum(case when a.题型='''+题型+''' then 1 else 0 end) as ['+题型+']'
from(select distinct 题型 from 题库 where 部门=@dept)t
exec ('select '
+@sql
+',sum(b.成绩)总分,a.姓名,a.部门,a.年份 from 题库 a,成绩 b where a.题号=b.题号 and a.部门='''
+@dept
+''' group by a.姓名,a.部门,a.年份'
)
AS
declare @dept varchar(20),@sql varchar(40)
set @dept='人力资源部'
select @sql=isnull(@sql+',','')+'sum(case when a.题型='''+题型+''' then 1 else 0 end) as ['+题型+']'
from(select distinct 题型 from 题库 where 部门=@dept)t
exec ('select '
+@sql
+',sum(b.成绩)总分,a.姓名,a.部门,a.年份 from 题库 a,成绩 b where a.题号=b.题号 and a.部门='''
+@dept
+''' group by a.姓名,a.部门,a.年份'
)
GO
这样写?
@dept这个作为参数传进去CREATE PROCEDURE SELECT_TABLE
@dept varchar(20)
AS
declare @sql varchar(40)
select @sql=isnull(@sql+',','')+'sum(case when a.题型='''+题型+''' then 1 else 0 end) as ['+题型+']'
from(select distinct 题型 from 题库 where 部门=@dept)t
exec ('select '
+@sql
+',sum(b.成绩)总分,a.姓名,a.部门,a.年份 from 题库 a,成绩 b where a.题号=b.题号 and a.部门='''
+@dept
+''' group by a.姓名,a.部门,a.年份'
)
GO
--执行调用
exec SELECT_TABLE '人力资源部'
create PROCEDURE test_proc
@dept varchar(20)
as
declare @r varchar(200),@r1 varchar(200),@r2 varchar(200)--,@dept varchar(20)
--set @dept='销售部'
set @r2=stuff((select distinct ',isnull('+QUOTENAME(题型)+',0) as '+QUOTENAME(题型) from [题库] where 部门=@dept for xml path('')),1,1,'')
set @r1=stuff((select distinct '+isnull('+QUOTENAME(题型)+',0)' from [题库] where 部门=@dept for xml path('')),1,1,'')
set @r=stuff((select distinct ','+QUOTENAME(题型) from [题库] where 部门=@dept for xml path('')),1,1,'')exec ( 'select 姓名 ,部门 ,年份,'+@r1+' as 总分,'+@r2+' from
(select 姓名,部门,题型,年份,b.[成绩] from [题库] a,[成绩] b where a.[题号]=b.[题号] and 部门='''+@dept+''') a'
+' pivot ( sum([成绩]) for 题型 in('+ @r+')) pvt')
exec test_proc '销售部'
姓名 部门 年份 总分 判断题 填空题 叙述题 选择题
---- ---------- ----------- ----------- ----------- ----------- ----------- -----------
销三 销售部 2010 25 10 5 0 10
销四 销售部 2009 22 0 12 5 5(2 行受影响)exec test_proc '人力资源部'姓名 部门 年份 总分 填空题 问答题 选择题
---- ---------- ----------- ----------- ----------- ----------- -----------
人四 人力资源部 2010 16 3 11 2(1 行受影响)
@tabletype varchar(20),
@tableyear varchar(20)
as
declare @r varchar(200),@r1 varchar(200),@r2 varchar(200)set @r2=stuff((select distinct ',isnull('+QUOTENAME(KPITARGET)+',0) as '+QUOTENAME(KPITARGET) from [PA_TG_Table] where qurater = @tablequarter and table_type=@tabletype and table_year = @tableyear),1,1,'' )
set @r1=stuff((select distinct '+isnull('+QUOTENAME(KPITARGET)+',0)' from [PA_TG_Table] where qurater = @tablequarter and table_type=@tabletype and table_year = @tableyear),1,1,'' )
set @r=stuff((select distinct ','+QUOTENAME(KPITARGET) from [PA_TG_Table] where qurater = @tablequarter and table_type=@tabletype and table_year = @tableyear ),1,1,'')exec ( 'select user_name ,area_name,'+@r1+' as 总分,'+@r2+' from
(select user_name,area_name,KPITARGET,b.[MARK] from [PA_TG_Table] a,[PA_TG_MARK] b where a.[Table_NO]=b.[_id] and table_type='''+@tabletype+''' and qurater='''+@tablequarter+'' and table_year='''+@tableyear+'') a'
+' pivot ( sum([]) for KPITARGET in('+ @r+')) pvt')
说and附近不对