sql脚本求完善

寡亾 2011-08-02 01:45:12
create PROCEDURE spGetSM_FiveSCheck
@employeeName NVARCHAR(20)='',
@BeginDate DATETIME,
@EndDate DATETIME
AS
BEGIN
declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select employeeName'
select @sql = @sql + ' , max(case ckDate when ''' + convert(NVARCHAR(10),ckDate,121)
+ ''' then score else 0 end) [' + convert(nvarchar(10),ckDate,121) + ']'
+ ',max(case ckDate when ''' + convert(nvarchar(10),ckDate,121)
+ ''' then remark else '''' end) [' + convert(nvarchar(10),ckDate,121) + '_备注]'
from SM_FiveSCheck
WHERE [status]='汇总' AND
(employeeName =@employeeName OR @employeeName='') AND
DATEDIFF(DAY,@BeginDate,ckDate)>=0 AND
DATEDIFF(DAY,ckDate,@EndDate)>=0

group by ckDate
order by ckDate
set @sql = @sql + ' from SM_FiveSCheck group by employeeName'
exec(@sql)



CREATE TABLE #TempFields([id] INT IDENTITY,fieldname NVARCHAR(50),columnname NVARCHAR(50),columntype NVARCHAR(50),width INT,needfilter INT,backcolor NVARCHAR(20),alignment NVARCHAR(20))

INSERT INTO #TempFields(fieldname,columnname,width,needfilter,columntype) VALUES('selected','',30,0,'SelectorColumnStyle')
INSERT INTO #TempFields(fieldname,columnname,width,needfilter) VALUES('employeeName','员工姓名',80,1)

SET @TempDate = @BeginDate
WHILE DATEDIFF(DAY,@TempDate,@EndDate)>0
BEGIN

INSERT INTO #TempFields(fieldname,columnname,width,needfilter)
VALUES(CONVERT(NVARCHAR(10),@TempDate,121),null,80,0)

INSERT INTO #TempFields(fieldname,columnname,width,needfilter)
VALUES(CONVERT(NVARCHAR(10),@TempDate,121)+'_备注',null,110,0)

SET @TempDate = DATEADD(DAY,1,@TempDate)
END

SELECT 1 controlid,1 gridid,'SM_FiveSCheck' mappingname,0 alternatingbackcolor,0 backcolor,0 forecolor,
0 isallowdelete,0 isallowedit,0 isallownew,1 isheadervisible,'' headerfontname,0 headerfontsize,
0 headerforecolor,0 headerbackcolor,1 iscaptionvisible,'' captiontext,'' fontfamily,
0 fontsize,'' [description],0 allowsorting

SELECT 1 gridid,[id] columnid,case when columnname is null then fieldname else columnname end columnname,ISNULL(columntype,'LabelColumnStyle') columntype,fieldname mappingname,
'' mappingtype,ISNULL(width,100) width,'Left' alignment,1 isreadonly,0 isallownull,0 ishidden,'' [format],
'' nullvalue,'' truevalue,'' falsevalue,'White' backcolor,'Black' forecolor,
'' backcolorcondition,'' forecolorcondition,'宋体' fontfamily,9 fontsize,'Regular' fontstyle,
'' items,ISNULL(needfilter,0) needfilter,'' tablename,'' visiblecondition,'' enabledcondition,
null validate,null validateinfo,null validatepattern,null defaultvalue
FROM #TempFields
ORDER BY [id]

CREATE TABLE #TempTables(
tableid INT IDENTITY,
tablename NVARCHAR(100)
)

INSERT INTO #TempTables VALUES('SM_FiveSCheck')
INSERT INTO #TempTables VALUES('t_sheetgrids')
INSERT INTO #TempTables VALUES('t_sheetcolumns')
INSERT INTO #TempTables VALUES('t_tables')

SELECT * FROM #TempTables ORDER BY tableid
END



想显示:姓名 部门 考核 备注 考核 被注
部门字段:department

然后想把每个员工的考核分数加起来。。。。。sumScore 跪求完善!急急急
...全文
155 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
寡亾 2011-08-02
  • 打赏
  • 举报
回复
乳此的强大,我服了!
19楼正解!
20楼出来的结果是多出来一行,employeeName是null,数据中没有这个数据的。不过还是谢谢,学习了、

本次发帖谢谢各位参与!
隆重鸣谢:园丁小三、涩郎

快溜 2011-08-02
  • 打赏
  • 举报
回复
with rollup
declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select employeeName,max(department)'
select @sql = @sql + ' , max(case ckDate when ''' + convert(NVARCHAR(10),ckDate,121)
+ ''' then score else 0 end) [' + convert(nvarchar(10),ckDate,121) + ']'
+ ',max(case ckDate when ''' + convert(nvarchar(10),ckDate,121)
+ ''' then remark else '''' end) [' + convert(nvarchar(10),ckDate,121) + '_备注]'
from SM_FiveSCheck
WHERE [status]='汇总' AND
(employeeName =@employeeName OR @employeeName='') AND
DATEDIFF(DAY,@BeginDate,ckDate)>=0 AND
DATEDIFF(DAY,ckDate,@EndDate)>=0

group by ckDate
order by ckDate
set @sql = @sql + ' from SM_FiveSCheck group by employeeName with rollup'
exec(@sql)

AcHerat 2011-08-02
  • 打赏
  • 举报
回复

declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select employeeName,department'
select @sql = @sql + ' , max(case ckDate when ''' + convert(NVARCHAR(10),ckDate,121)
+ ''' then score else 0 end) [' + convert(nvarchar(10),ckDate,121) + ']'
+ ',max(case ckDate when ''' + convert(nvarchar(10),ckDate,121)
+ ''' then remark else '''' end) [' + convert(nvarchar(10),ckDate,121) + '_备注]'
from SM_FiveSCheck
WHERE [status]='汇总' AND
(employeeName =@employeeName OR @employeeName='') AND
DATEDIFF(DAY,@BeginDate,ckDate)>=0 AND
DATEDIFF(DAY,ckDate,@EndDate)>=0

group by ckDate
order by ckDate
set @sql = @sql + ',(select sum(score) from SM_FiveSCheck where employeeName = t.employeeName '
+' and department = t.department) as emp_sum '
+' from SM_FiveSCheck t group by employeeName,department'
exec(@sql)
寡亾 2011-08-02
  • 打赏
  • 举报
回复
10楼,16楼把部门那个问题解决了。
还有一个问题,想统计每日考核的分数,把每个人的分数来个总计,,,在这个长脚本的基础上实现,,,有这么强大的SQL吗?
快溜 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 timefile 的回复:]
部门列在这个表里面SM_FiveSCheck,这个表的字段:employeeName,department,ckDate,score,remark,这么多的脚本实际上只是操作了这一张表......做了一个行转列的操作,动态的,后面是实现显示而已、
[/Quote]晕,十楼的不对吗?没注意看
AcHerat 2011-08-02
  • 打赏
  • 举报
回复

declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select employeeName,department'
select @sql = @sql + ' , max(case ckDate when ''' + convert(NVARCHAR(10),ckDate,121)
+ ''' then score else 0 end) [' + convert(nvarchar(10),ckDate,121) + ']'
+ ',max(case ckDate when ''' + convert(nvarchar(10),ckDate,121)
+ ''' then remark else '''' end) [' + convert(nvarchar(10),ckDate,121) + '_备注]'
from SM_FiveSCheck
WHERE [status]='汇总' AND
(employeeName =@employeeName OR @employeeName='') AND
DATEDIFF(DAY,@BeginDate,ckDate)>=0 AND
DATEDIFF(DAY,ckDate,@EndDate)>=0

group by ckDate
order by ckDate
set @sql = @sql + ' from SM_FiveSCheck group by employeeName,department'
exec(@sql)


这样?
寡亾 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ssp2009 的回复:]
引用 11 楼 timefile 的回复:
部门列在这个表里面SM_FiveSCheck,这个表的字段:employeeName,department,ckDate,score,remark,这么多的脚本实际上只是操作了这一张表......做了一个行转列的操作,动态的,后面是实现显示而已、


SQL code

declare @sql varchar(8000)
DECL……
[/Quote]
同一个表俩个别名会报错,字段不明确/
寡亾 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 acherat 的回复:]
SQL code


declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select a.employeeName,b.部门名'
select @sql = @sql + ' , max(case a.ckDate when ''' + convert(NVARCHA……
[/Quote]
部门也在SM_FiveSCheck 表中,且没有设部门ID、
快溜 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 timefile 的回复:]
部门列在这个表里面SM_FiveSCheck,这个表的字段:employeeName,department,ckDate,score,remark,这么多的脚本实际上只是操作了这一张表......做了一个行转列的操作,动态的,后面是实现显示而已、
[/Quote]
declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select a.employeeName,b.department'
select @sql = @sql + ' , max(case ckDate when ''' + convert(NVARCHAR(10),ckDate,121)
+ ''' then score else 0 end) [' + convert(nvarchar(10),ckDate,121) + ']'
+ ',max(case ckDate when ''' + convert(nvarchar(10),ckDate,121)
+ ''' then remark else '''' end) [' + convert(nvarchar(10),ckDate,121) + '_备注]'
from SM_FiveSCheck
WHERE [status]='汇总' AND
(employeeName =@employeeName OR @employeeName='') AND
DATEDIFF(DAY,@BeginDate,ckDate)>=0 AND
DATEDIFF(DAY,ckDate,@EndDate)>=0

group by ckDate
order by ckDate
set @sql = @sql + ' from SM_FiveSCheck a,SM_FiveSCheck b where a.employeeName=b.employeeName
group by a.employeeName,b.department'
exec(@sql)

AcHerat 2011-08-02
  • 打赏
  • 举报
回复

declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select a.employeeName,b.部门名'
select @sql = @sql + ' , max(case a.ckDate when ''' + convert(NVARCHAR(10),ckDate,121)
+ ''' then a.score else 0 end) [' + convert(nvarchar(10),ckDate,121) + ']'
+ ',max(case a.ckDate when ''' + convert(nvarchar(10),ckDate,121)
+ ''' then a.remark else '''' end) [' + convert(nvarchar(10),ckDate,121) + '_备注]'
from SM_FiveSCheck
WHERE [status]='汇总' AND
(employeeName =@employeeName OR @employeeName='') AND
DATEDIFF(DAY,@BeginDate,ckDate)>=0 AND
DATEDIFF(DAY,ckDate,@EndDate)>=0

group by ckDate
order by ckDate
set @sql = @sql + ' from SM_FiveSCheck a join 部门表 b on a.部门ID = b.部门ID group by a.employeeName,b.部门名'
exec(@sql)
寡亾 2011-08-02
  • 打赏
  • 举报
回复
部门列在这个表里面SM_FiveSCheck,这个表的字段:employeeName,department,ckDate,score,remark,这么多的脚本实际上只是操作了这一张表......做了一个行转列的操作,动态的,后面是实现显示而已、
快溜 2011-08-02
  • 打赏
  • 举报
回复
这样?
declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select employeeName,max(department)'
select @sql = @sql + ' , max(case ckDate when ''' + convert(NVARCHAR(10),ckDate,121)
+ ''' then score else 0 end) [' + convert(nvarchar(10),ckDate,121) + ']'
+ ',max(case ckDate when ''' + convert(nvarchar(10),ckDate,121)
+ ''' then remark else '''' end) [' + convert(nvarchar(10),ckDate,121) + '_备注]'
from SM_FiveSCheck
WHERE [status]='汇总' AND
(employeeName =@employeeName OR @employeeName='') AND
DATEDIFF(DAY,@BeginDate,ckDate)>=0 AND
DATEDIFF(DAY,ckDate,@EndDate)>=0

group by ckDate
order by ckDate
set @sql = @sql + ' from SM_FiveSCheck group by employeeName'
exec(@sql)

快溜 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 timefile 的回复:]
我承认很长,好吧,只看这部分

SQL code
declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select employeeName'
select @sql = @sql + ' , max(case ckDate when ''' + convert(NVA……
[/Quote]部门列在哪个表里?
Elvis_chen 2011-08-02
  • 打赏
  • 举报
回复
可以把SQL分解,一步一步慢慢测,就会找到问题所在。
寡亾 2011-08-02
  • 打赏
  • 举报
回复
加分了,100,我最多给100,加不上了,求给力回复!
寡亾 2011-08-02
  • 打赏
  • 举报
回复
求牛哥牛妞给解!
  • 打赏
  • 举报
回复
表示不懂
寡亾 2011-08-02
  • 打赏
  • 举报
回复
我承认很长,好吧,只看这部分
 declare @sql varchar(8000)
DECLARE @TempDate DATETIME

set @sql = 'select employeeName'
select @sql = @sql + ' , max(case ckDate when ''' + convert(NVARCHAR(10),ckDate,121)
+ ''' then score else 0 end) [' + convert(nvarchar(10),ckDate,121) + ']'
+ ',max(case ckDate when ''' + convert(nvarchar(10),ckDate,121)
+ ''' then remark else '''' end) [' + convert(nvarchar(10),ckDate,121) + '_备注]'
from SM_FiveSCheck
WHERE [status]='汇总' AND
(employeeName =@employeeName OR @employeeName='') AND
DATEDIFF(DAY,@BeginDate,ckDate)>=0 AND
DATEDIFF(DAY,ckDate,@EndDate)>=0

group by ckDate
order by ckDate
set @sql = @sql + ' from SM_FiveSCheck group by employeeName'
exec(@sql)


我还有一个部门department列,我想在员工姓名后面在显示个部门、、、、、、这个难度大吗??反正我是鬦不出来、
闹铃 2011-08-02
  • 打赏
  • 举报
回复
AcHerat 2011-08-02
  • 打赏
  • 举报
回复
好长
加载更多回复(1)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧