關於sql server字串匯總

來源:互聯網
上載者:User

本人在開發一個小項目——“學生畢業設計管理”,其中有學生選題模組,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的結果。

以上是俺的做法,可能不是最好,希望拋磚引玉,或對同仁有啟發作用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.