原文: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. silverlight打开和保存文件

    因为Silverlight是运行在浏览器中的客户端,所以对于程序的操作权限要求比较严格,以本篇的主题来说,一个表现就是不能够随意的进行文件打开和保存操作,如果在代码中直接使用Stream来操作文件,会 ...

  2. 笔试面试1 用C实现C库函数itoa, atoi

    要求用C实现C库函数itoa或者是atoi.也就是字符串和数字的相互转换. 事实上这是一个很easy的问题. 可是有次笔试我没有理解好题意,也没有想到事实上这就是一个怎样将数字以字符串的方式存放. 这 ...

  3. 【Android】12.2 利用Intent启动和关闭Activity

    分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 Android应用程序中一般都有多个Activity,在Activity中,通过调用StartActivity方法 ...

  4. Oracle PLSQL Demo - 31.执行动态SQL拿一个返回值

    DECLARE v_sql ) := ''; v_count NUMBER; BEGIN v_sql := v_sql || 'select count(1) from scott.emp t'; E ...

  5. ELK的索引的坑——Kibana的图形化(Tile Map)

    如果想通过ELK展示地图, 需要将索引名称修改为:logstash*的格式 否则location字段不会修改成geo_point的形式. 详情参考:http://blog.csdn.net/yangg ...

  6. c++之——多态性

    先看一个例子: #include<iostream> using namespace std; class Liberation { public: Liberation(int a):c ...

  7. JAVA-JSP之include指令

    相关资料:<21天学通Java Web开发> 结果总结:1.包含的可以是一个HTML文件,也可以是一个文件文件,当然也可以是一个JSP文件.2.只有当被包含的文件执行完成后,JSP文件才会 ...

  8. qsort的使用

    转自 http://blog.csdn.net/eroswang/archive/2009/04/15/4075580.aspx 最近用到了qsort,简单整理一下,方便以后的查找 qsort,包含在 ...

  9. 基于CSS3自定义美化复选框Checkbox组合

    今天我们要来分享一组非常漂亮的CSS3自定义复选框checkbox,每一个checkbox都有其各自的特点.有几款checkbox在选中的情况下还会出现动画效果,非常不错的CSS3自定义美化check ...

  10. C语言 · 简单加法

    算法提高 简单加法   时间限制:1.0s   内存限制:256.0MB      问题描述 小于10的自然数中有四个数字能除尽3或5(3, 5, 6, 9),它们的和为23. 请计算所有小于1000 ...