锁定老帖子 主题:各位坛子里的兄弟来看看这个面试题。
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-26
TheMatrix 写道 刚在mysql里试了下:
mysql> user test; mysql> select userid,group_contact(role_name) from userrole group by userid; ERROR 1305 (42000): FUNCTION test.group_contact does not exist mysql> select * from userrole; +------------+--------+------------+---------+ | userRoleId | userid | role_name | role_id | +------------+--------+------------+---------+ | 1 | 1 | 管理员 | 1 | | 2 | 1 | 编辑 | 2 | | 3 | 1 | 超级管理员 | 3 | | 4 | 2 | 普通会员 | 4 | | 5 | 3 | 高级会员 | 5 | | 6 | 4 | | 0 | +------------+--------+------------+---------+ 为什么出现:ERROR 1305 (42000): FUNCTION test.group_contact does not exist ??? group_concat 拼错了 示例: http://www.java2s.com/Tutorial/MySQL/0320__Aggregate-Functions/GROUPCONCATexprreturnsastringresultwiththeconcatenatednonNULLvaluesfromagroup.htm |
|
返回顶楼 | |
发表时间:2011-09-26
oracle 的话 使用 decode函数搞定
|
|
返回顶楼 | |
发表时间:2011-09-26
很显然,需要使用聚集函数,类似sum()这样的,不过这个聚集函数功能是将String 连接起来,如果数据库有直接使用,我没记错的话oracle9i是没有的,不过可以参考oracle的文档自己实现一个。
|
|
返回顶楼 | |
发表时间:2011-09-26
kelloKitty 写道 帖子别沉了。没有人知道吗?
SELECT Userid, LTRIM(SYS_CONNECT_BY_PATH( role_name , ','), ',') AS NAMES FROM (SELECT userid, role_name, ROW_NUMBER() OVER(PARTITION BY userid ORDER BY role_name) AS RN, COUNT(*) OVER(PARTITION BY userid) AS CNT FROM 表名 ) WHERE LEVEL = CNT START WITH RN = 1 CONNECT BY PRIOR userid = userid AND PRIOR RN = RN - 1; |
|
返回顶楼 | |