现有一表A
id 姓名 考核年度 岗位履职 对口考核 *宣传发表 *调研发表 *信息发表 *每日一题 *其他 
1  张三 2012      10         0        0         0          0         0        0
2  李四 2012       0         0       10         0          0         0        0
3  张三 2011      10         0        0         0          0         0        0
4  张三 2010       0         0        0         0          0         5        0
5  李四 2011       0         0        10        0          0         0        0
6  张三 2012       0         10       0         0          0         0        0
(注)带星号的为动态列,可从程序随意添加和删除的列想实现以下结果id  姓名  考核年度  岗位履职  对口考核  加减分  总分
1   张三  2012       10          10      0       20
2   张三  2011       10          0       10      15
3   张三  2010       0           0       5       5表A带星号的列  求和后 as 加减分,结果中的总分 就是行数值总和 也就是想要 2012年度 岗位、对口、加减分的纵向和 还有结果中每行的横向和

解决方案 »

  1.   

    select t.year,t.j1,j2,j3,(j1+j2+j3)as total (SELECT a.year,SUM(a.岗位履职) AS j1,SUM(a.对口考核) AS j2,SUM(a.宣传发表)AS j3 FROM A a
    WHERE a.name='张三'
    GROUP BY a.[year])t
    至于动态的,建议穿参数进去
      

  2.   

    这个是前端数据展示的问题吧,datagrid控件有新增/删除列时,
    事件触发去重算一遍加减分和总分字段的值.
      

  3.   

    ALTER PROC [dbo].[up_JXhuizong]
    @JXtime varchar(50),
    @sql8 varchar(50)
    as
    declare @str varchar(2000)
    set @str=''
    select @str=@str+',sum('+name+') as '+name
    from syscolumns where id=object_id('JXhuizong')
    and name not in('id','JXtime','姓名','UnitName','岗位履职','JXniandu') 
    declare @col varchar(2000)
    set @col=''
    select @col=@col+'+sum('+name+')'
    from syscolumns where id=object_id('JXhuizong')
    and name not in('id','JXtime','姓名','UnitName','岗位履职','JXniandu') 
    print @col
    set @str='select row_number()over(order by getdate()) as id,UnitName as 部门,姓名,岗位履职'
    +@str+',(select '+RIGHT(@col,LEN(@col)-1)+' from JXhuizong b where a.姓名=b.姓名 and JXtime='''+@JXtime+''')as 加减总分 
    from JXhuizong a where JXtime='''+@JXtime+''' group by UnitName,姓名,岗位履职 '+@sql8+''
    exec( @str)
    以上代码可以得到这个表的纵向、横向的和
    只是动态的列的和AS成“加减分”不知道怎么弄
      

  4.   

    try this,
    ALTER PROC [dbo].[up_JXhuizong]
    (@JXtime varchar(50),
     @sql8 varchar(50))
    as
    declare @str varchar(2000)
    set @str=''
    select @str=@str+',sum('+name+') as '+name
    from syscolumns 
    where id=object_id('JXhuizong')
    and name not in('id','JXtime','姓名','UnitName','岗位履职','JXniandu')  declare @col varchar(2000)
    set @col=''
    select @col=@col+'+'+name
    from syscolumns 
    where id=object_id('JXhuizong')
    and name not in('id','JXtime','姓名','UnitName','岗位履职','JXniandu')  print @colset @str='select row_number()over(order by getdate()) as id,UnitName as 部门,姓名,岗位履职'
    +@str+',(select '+RIGHT(@col,LEN(@col)-1)
    +' from JXhuizong b where a.姓名=b.姓名 and JXtime='''+@JXtime+''')as 加减总分  
    from JXhuizong a where JXtime='''+@JXtime+''' group by UnitName,姓名,岗位履职 '+@sql8+''exec(@str)
      

  5.   

    所有动态列的和相加的结果AS 加减分动态列1 动态列2 动态列3 
    1         2       3
    1         2       3(sum(动态列1)+sum(动态列2)+sum(动态列3)) as 加减分
      

  6.   


    子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
      

  7.   


    SELECT id,姓名,考核年度,岗位履职,对口考核,
    *宣传发表,*调研发表,*信息发表,*每日一题,*其他,SUM(TOTAL)  
    FROM T 
    (
    SELECT id,姓名,考核年度,SUM(岗位履职) AS 岗位履职,SUM(对口考核) AS 对口考核,
    SUM(*宣传发表) AS '*宣传发表',SUM(*调研发表) AS '*调研发表',
    SUM(*信息发表) AS '*信息发表',SUM(*每日一题) AS '*每日一题',SUM(*其他) AS '*其他',
    (岗位履职+对口考核+*宣传发表+*调研发表+*信息发表+*每日一题+*其他) AS TOTAL 
    FROM A 
    GROUP BY ID,姓名,考核年度) T 
    GROUP BY id,姓名,考核年度,岗位履职,对口考核,
    *宣传发表,*调研发表,*信息发表,*每日一题,*其他