您的位置:程序门 -> ms-sql server -> 基础类



求一个比较难的视图,请教高手!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求一个比较难的视图,请教高手![已结贴,结贴人:hzpike]
发表于:2007-03-01 14:26:59 楼主
表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)

即将关系表中的同一关键字段的记录中不同关系字段组合成一个字段。
求这样一个视图。
发表于:2007-03-01 14:37:461楼 得分:30
--建立測試環境
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)
*/
发表于:2007-03-01 20:51:342楼 得分:0
恩   ls正确
不过,我一般不喜欢用stuff
发表于:2007-03-02 13:21:323楼 得分:0
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,uer   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


select   queueid,userinfo=uer+ '( '+cast(age   as   varchar(20))+ ') '
into   #t   from   b
select   queueid,userinfo=user+ '( '+cast(age   as   varchar(20))+ ') '
into   #t   from   b
declare   @queueid   int,@userinfo   varchar(40)
update   #t   set
@userinfo=case   when   @queueid=queueid   then   @userinfo+ ', '+userinfo   else   userinfo   end,
@queueid=queueid,
userinfo=@userinfo  

select   queueid,userinfo=max(userinfo)   from   #t   group   by   queueid


快速检索

最新资讯
热门点击