首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

比较难的视图,

2011-12-31 
求一个比较难的视图,请教高手!表aqueueidqueuename1aaa2bbb3ccc表bqueueiduserage1mike111tom121sam142lil

求一个比较难的视图,请教高手!
表a
queueid   queuename
1                 aaa
2                 bbb
3                 ccc

表b
queueid     user         age
1                 mike           11
1                 tom             12
1                 sam             14
2                 lily           15
2                 lucy           10
3                 pike           13

求视图结果为
queueid   queuename   userinfo
1                 aaa             mike(11),tom(12),sam(14)
2                 bbb             lily(15),lucy(10)
3                 ccc             pike(13)

即将关系表中的同一关键字段的记录中不同关系字段组合成一个字段。
求这样一个视图。

[解决办法]
--建立測試環境
Create Table a
(queueidInt,
queuenameVarchar(10))
Insert a Select 1, 'aaa '
Union All Select 2, 'bbb '
Union All Select 3, 'ccc '

Create Table b
(queueidInt,
[user]varchar(10),
ageInt)

Insert b Select 1, 'mike ', 11
Union All Select 1, 'tom ', 12
Union All Select 1, 'sam ', 14
Union All Select 2, 'lily ', 15
Union All Select 2, 'lucy ', 10
Union All Select 3, 'pike ', 13
GO
--建立函數
Create Function Getuserinfo(@queueid Int)
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @S = ' '
Select @S = @S + ', ' + [user] + '( ' + Rtrim(age) + ') ' From b Where queueid = @queueid
Select @S= Stuff(@S, 1, 1, ' ')
Return @S
End
GO
--建立視圖
Create View V_List
As
Select
queueid,
queuename,
dbo.Getuserinfo(queueid) As userinfo
From a
GO
--測試
Select * From V_List
GO
--刪除測試環境
Drop Table a,b
Drop Function Getuserinfo
Drop View V_List
--結果
/*
queueidqueuenameuserinfo
1aaamike(11),tom(12),sam(14)
2bbblily(15),lucy(10)
3cccpike(13)
*/

热点排行