原文:http://blog.csdn.net/java85140031/article/details/6820699

问题:

userId  role_name         role_id 
1         管理员                 1 
1         编辑                  2 
1         超级管理员           3 
2         普通会员                4 
3         高级会员                5 
4         null                    null 
很简单的数据,就是一个用户可能会对应多个角色,现在要求能用程序或者sql的方式用户和角色逗号进行分割。要求得到的数据如下:

userId  role_name 
1        管理员,编辑,超级管理员 
2        普通会员 
3        高级会员 
4        null

解答:

用程序估计是再简单不过了,数据库的话如下:

MySQL:直接调用函数group_contact完成
oracle10g:直接掉函数wm_concat完成
oracle9i:麻烦点,不过主要是通过sys_connect_by_path,这个函数能树枝进行按指定字符连接,之所以产生树是因为这里面用到了Oracle的START WITH 递归成树的

(1) MySQL 
group_concat函数是典型的字符串连接函数,下面就为您介绍MySQL group_concat的语法,希望对您学习

MySQL group_concat函数有所帮助。

MySQL group_concat函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

我的理解就是: 后面的 group by xx 分好组之后, 然后将组内的数据连接起来,默认是逗号

测试sql语句:

 insert into role VALUES(1,1,'管理员',1);
insert into role VALUES(2,1,'编辑',2);
insert into role VALUES(3,1,'超级管理员',3);
insert into role VALUES(4,2,'普通会员',4);
insert into role VALUES(5,3,'高级会员',5);

例子:

select userId,group_concat(role_name,';') from role group by userId;

result:

1  管理员;,编辑;,超级管理员;

2  普通会员;

3  高级会员;

扩展:

如果ORALCE\MYSQL本身有提供这字符串连接聚合函数的话,楼主这个问题,其实很容易解决的,即按USERID分组后,再将同组的role_name进行字符串连接就OVER。 
像ORALCE中wm_concat函数还不是ORACLE所有版本都有的,而像这种字符连接函数在实际编程中,是很常用的,SELECT CATSTR(role_name) FROM USER GROUP BY USERID,而这边这个 CATSTR聚合函数是自己在数据库PL/SQL实现的,具体实现方式可参见http://hi.baidu.com/xoy2129/blog/item/c7885e66a201f125ab184cea.html 
这样CATSTR就具有通用性了

也就是自定义函数

参见另外一篇: oracle中用户自己创建与调用聚合函数

SQL-字符串连接聚合函数的更多相关文章

  1. ORACLE字符串分组聚合函数(字符串连接聚合函数)

    ORACLE字符串连接分组串聚函数 wmsys.wm_concat SQL代码: select grp, wmsys.wm_concat(str) grp, 'a1' str from dual un ...

  2. 【HANA系列】SAP HANA SQL字符串连接操作

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL字符串连 ...

  3. sql语句 之聚合函数

      聚合分析 在访问数据库时,经常需要对表中的某列数据进行统计分析,如求其最大值.最小值.平均值等.所有这些针对表中一列或者多列数据的分析就称为聚合分析. 在SQL中,可以使用聚合函数快速实现数据的聚 ...

  4. SQL Server 自定义聚合函数

    说明:本文依据网络转载整理而成,因为时间关系,其中原理暂时并未深入研究,只是整理备份留个记录而已. 目标:在SQL Server中自定义聚合函数,在Group BY语句中 ,不是单纯的SUM和MAX等 ...

  5. 【SQL】CLR聚合函数什么鬼

    之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下. 一.杂项 ...

  6. MySQL 字符串连接CONCAT()函数

    MySQL字符串连接函数 使用方法:CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串, ...

  7. SQL中的聚合函数

    聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体的聚合函数如下:1. AVG 返回指定组中的平均值,空值被忽略. 例 ...

  8. SQL中的聚合函数运用

    参考网址: https://zhuanlan.zhihu.com/p/245115561 聚合函数是什么 聚合函数是对一组值执行计算,并返回单个值的函数.常与 SELECT 语句的 GROUP BY ...

  9. SQL server 数据库 ——聚合函数(一列 多行,值类型)

    聚合函数 5种函数: 1.max最大值   select max(price) from car where code='c024' 2.min最小值   select * from car wher ...

  10. SQL 字符串分割表函数

    --字符串分割表函数 ) ) declare @i int; declare @count int; ); ); declare @Index int; )) declare @rowID int; ...

随机推荐

  1. [hihoCoder] 骨牌覆盖问题·一

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对 ...

  2. php excel类 phpExcel使用方法介绍

    phpExcel操作excel可以方便的加入图片,支持jpg gif png格式. 下载地址:http://www.codeplex.com/PHPExcel 下面是总结的几个使用方法 include ...

  3. Js控制弹窗实现在任意分辨率下居中显示

    弹窗居中比较烦人的是怎么才能在任意分辨率下实现居中显示.1,html部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...

  4. [na]win PPTP场景与搭建

    这也是在不成熟时期的一种对windows远程访问的好奇. 现在看来没啥用了. 现在一般都用linux的openvpn+gg方案了 远程访问方案: ,端口映射 ,vpn 实现这种远程访问的协议:pptp ...

  5. Socket相关函数(2)- sendto(), recvfrom() UDP模型

    udp_server.c #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #in ...

  6. 【转】32位和64位系统区别及int字节数

    http://blog.csdn.net/zhongzhiwei/article/details/8678885 一)64位系统和32位有什么区别? 1.64bit CPU拥有更大的寻址能力,最大支持 ...

  7. linux命令(29):用户组管理

    用户管理: 新建用户或组:新建用户:adduser user //新建user用户(推荐)passwd user //给user用户设置密码 新建组:groupadd test //新建test工作组 ...

  8. eclipse egit 报错 The current branch is not configured for pull No value for key branch.master

    eclipse egit 插件 pull报错 The current branch is not configured for pull No value for key branch.master ...

  9. 用Python写一个猜数字游戏

    2015.5.25第一天下载Python IDLE,写个猜数字的小游戏来熟悉这门语言: times=6 letters=[100] for i in range(1,times): a = input ...

  10. ucos-III前言

    年 uC/OS-III实时操作系统面世以来,uC/OS-III的性能和稳定性已经日趋完善.uC/OS-III对前面版本取精弃粕,推陈出新,功能和性能比起 uC/OS-II已经上了很大一步台阶.uC/O ...