现有一表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年度 岗位、对口、加减分的纵向和 还有结果中每行的横向和
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年度 岗位、对口、加减分的纵向和 还有结果中每行的横向和
解决方案 »
- 关于插入不重复的问题
- 请问sql如何获取一个0-15之间的随机数(不包括0,15),而且必须带两位随机的小数
- [向liangCK大哥以及各位大哥提问]数据库一个表与另一个表数据绑定的问题
- SQL问题,各位老师来看看。
- 请教一下,怎样写这个SQL语句 ?难难难!
- SQL SERVER2005无法安装
- 自增(identity)属性的字段适合做有实际意义的记录的ID号吗?
- 求如何判断数据库中是否存在一表的sql语句,可否不仅适用于sql server,还是用于其它db2,access等数据库
- 系统安装二个sql实例后登录问题?
- 如何将此结果插入到数据库中?
- 图形操作 添加的标识增长 如何 用查询语句删除?
- 触发器问题
WHERE a.name='张三'
GROUP BY a.[year])t
至于动态的,建议穿参数进去
事件触发去重算一遍加减分和总分字段的值.
@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成“加减分”不知道怎么弄
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)
1 2 3
1 2 3(sum(动态列1)+sum(动态列2)+sum(动态列3)) as 加减分
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
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,姓名,考核年度,岗位履职,对口考核,
*宣传发表,*调研发表,*信息发表,*每日一题,*其他