首页 新闻 搜索 专区 学院

SQL:同一字段的记录相加

0
悬赏园豆:10 [已关闭问题]

 

要对上面三个表进行联合查询,得出以下结果:

UserID   UserName  RoleName

1            lei                1

3            xiao             1,4

8            test_f          1,2

....

查询字符串如下:

select Distinct(u.UserID),UserName,RoleName from Users  as u,Roles as r,R_Users_Roles as rur
  where rur.UserID=u.UserID and rur.RoleID=r.RoleID and rur.RecordStatus=0

显示结果:

问题是:

写不出 RoleName 的多条记录相加的sql 语句(查询结果UserID无重复),请求高手帮忙指点一下,先行谢过!

问题补充: 可以用LinQ实现吗,如果可以,请赐教,谢谢! 声明:RoleName 为字符串格式字段。
mayixue的主页 mayixue | 初学一级 | 园豆:29
提问于:2008-10-27 09:51
< >
分享
其他回答(4)
0

可以做,但是要使用游标以及字符串的函数等,对于不同的数据库自然也有着不同的实现,并且效率并不是很高,如果一个用户对应的角色并不是很多的话,还是建议全部提取后到上层通过程序的方法实现归并

Gray Zhang | 园豆:17610 (专家六级) | 2008-10-27 10:14
0

select Distinct(u.UserID),UserName,count(RoleName) from Users  as u,Roles as r,R_Users_Roles as rur
 group by u.UserID
 having rur.UserID=u.UserID and rur.RoleID=r.RoleID and rur.RecordStatus=0

 这样试试?

| 园豆:770 (小虾三级) | 2008-10-27 10:42
0

楼主用的是linqpad吧.

如果是sqlserver2005我觉得可以写个函数,输入是userid,返回的是1,3,4这样的rolename字符串,接着在查询中用across apply 对查询的每一行调用此函数,生成楼主需要的结果即可.至于效率问题我还不是确定.

linq的方法肯定也行,大不了加载到内存后用C#进行处理.

Jerry Qian | 园豆:19 (初学一级) | 2008-10-27 12:52
0

没必要非用sql语句拼出来,还是数据取出来,在程序中拼比较好。

玉开 | 园豆:8822 (大侠五级) | 2008-10-27 14:41
0

哎,来晚了

Geeks | 园豆:560 (小虾三级) | 2008-10-30 15:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册