现在的位置: 首页 > 综合 > 正文

关于sql server字符串汇总

2011年11月22日 ⁄ 综合 ⁄ 共 1004字 ⁄ 字号 评论关闭

本人在开发一个小项目——“学生毕业设计管理”,其中有学生选题模块,如图1所示,我要求的功能是当鼠标放置到题目上时动态显示该题目的相关信息,如“课题简介”、“选题要求”、“允许选题人数”、“已选人数”等信息比较好处理,关键是“已选该题的学生名单”。


图1

思路1:设计一个已选该题学生名单字段(nvarchar(max)),动态修正该字段内容,添加选题学生比较容易,直接拼接字符串即可,删除比较麻烦,可以使用string.Replace(string   oldValue,   string   newValue)对字符串进行解析处理。但这样设计不符合1NF要求,并且多有不便。

思路2:设计表结构如图2所示,该设计完全符合1NF、2NF、3NF,问题是如何按照题目(title_id)汇总选该题的学生(student_no)?形成如图3效果:


图2

图3

我的做法如下:

首先写一个汇总函数:

 1ALTER function   [dbo].[getstr](@id   int)   
 2
 3 returns   varchar(2000)   
 4
 5 as     
 6
 7 begin   
 8
 9     declare   @str   nvarchar(2000)   
10
11     set   @str=''   
12
13     select   @str=@str+','+rtrim([student_name])   from   v_teacher_student   where   title_id=@Id   order   by   title_id   
14
15      set   @str=right(@str,len(@str)-1)   
16
17      return   @str   
18
19 end
20
21

然后再创建一个视图:

 

 1ALTER VIEW [dbo].[v_teacher_student_name]
 2
 3AS
 4
 5SELECT DISTINCT title_id, dbo.getstr(title_id) AS aaa
 6
 7FROM         dbo.v_teacher_student
 8
 9WHERE     (title IS NOT NULL)
10

 

即可得到如图3的结果。

以上是俺的做法,可能不是最好,希望抛砖引玉,或对同仁有启发作用。

抱歉!评论已关闭.