题号    题型    姓名    部门        年份
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.   

    我还是昨天那个人 唉 不会啊 T-SQL老师教过,不过没听过,基本不会,我只想要一个能帮我写好的存储过程,然后我自己在程序里调用就行了 谢谢SQL版的大虾们
      

  2.   

    declare @dept varchar(20),@sql varchar(max)
    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.年份'
          )
      

  3.   

    这种tSQL语句我要在程序里怎么去运行啊 asp
      

  4.   

    是不是要写成存储过程 然后再程序里面传参数调用啊  不会写T——SQL 也就不会写存储过程了,能不能给个存储过程的代码
      

  5.   

    CREATE PROCEDURE  SELECT_TABLE 
    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
    这样写?
      

  6.   

    晕。。
    @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 '人力资源部'
      

  7.   


    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 行受影响)
      

  8.   

    create PROCEDURE SELECT_TABLE@tablequarter varchar(20),
    @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附近不对