日期:2014-05-19  浏览次数:20481 次

求一个比较难的视图,请教高手!
表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
(queueid Int,
queuename Varchar(10))
Insert a Select 1, 'aaa '
Union All Select 2, 'bbb '
Union All Select 3, 'ccc '

Create Table b
(queueid Int,
[user] varchar(10),
age Int)

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
--結果
/*
queueid queuename userinfo
1 aaa mike(11),tom(12),sam(14)
2 bbb lily(15),lucy(10)
3 ccc pike(13)
*/