求一个比较难的视图,请教高手!
表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)
*/