今天项目需要对查询出来的结果集按照某个字段的值进行多行数据的合并,如果某个字段的值相同,就把这个字段对应的行中其他字段都用逗号连接,合并为一行。表结构类似于这样:
有T_STUDENT(学生表)、T_COURSE(课程表)、T_STUDENT_COURSE(学生课程关系表)三张表,学生表与课程表是多对多的关系,学生课程关系表为他们之间的关系表;
T_STUDENT(学生表):
T_COURSE(课程表):
T_STUDENT_COURSE(学生课程关系表):
三张表插入数据后,三表联查得出的结果集如下:
想要实现的结果是这样的:
刚开始使用的是wmsys.wm_concat函数处理,语句如下:
select studentid, studentname, wmsys.wm_concat(coursename) from (select s.id studentid, s.studentname, c.coursename from t_student s, t_course c, t_student_course sc where s.id = sc.studentid and c.id = sc.courseid) group by studentid,studentname;
但是该函数有限制,当链接的长度达到30k时,sql就执行不了了,上网查了下资料,发现oracle11g里面添加了新的函数listagg,按照listagg的使用方式,重写写了sql,如下:
SELECT distinct studentid, studentname, LISTAGG(coursename, ',') WITHIN GROUP(ORDER BY studentid) over(partition by studentid) coursename FROM (select s.id studentid, s.studentname, c.coursename from t_student s, t_course c, t_student_course sc where s.id = sc.studentid
最后查询出的结果集如下:
哈哈,终于用sql实现了这个需求。
相关推荐
* 自定义聚合函数 wmsys.wm_concat 替换办法 * 超大字符串拼接,单个字符串4000、分隔符100... * Oracle11g Release2版本引入了LISTAGG 函数,使得聚集连接字符串变得很容易。并且允许使用我们指定连接串中的字段顺序
在Oracle中,`WM_CONCAT`函数可以用来拼接字符串,但是它不是标准的Oracle功能,且在高版本中已被废弃,因为它可能会因为结果过长导致错误。为了解决这个问题,我们可以创建一个自定义的聚集函数,它允许我们指定...
Oracle 数据库中的字符串函数用于处理字符串相关的操作。例如,使用 LPAD 函数可以将字符串左填充到指定的长度;使用 TRUNC 函数可以截取字符串的部分字符。 知识点八:非等值联接 非等值联接是 Oracle 数据库中的...
2. **字符型函数**:字符处理是数据库操作中的重要环节,Oracle提供了许多用于处理字符串的函数。如`SUBSTR`用于提取字符串的一部分,`UPPER`和`LOWER`分别用于将字符串转为大写或小写,`INSTR`则用于查找子串的位置...
* Oracle Database 11g 支持多种数据类型,例如数值型、字符串型、日期型等。 * 每种数据类型都有其特点和应用场景。 知识点9:数据库安全 * 数据库安全是指保护数据库中的数据免受未经授权的访问和修改。 * ...
例如,不能将字符串插入整数列。 2. WHERE子句使用不当:WHERE子句中的条件表达式应正确,避免使用赋值操作符(=)代替比较操作符(==)。 3. GROUP BY与聚合函数:使用GROUP BY时,SELECT列表中的非聚合函数必须...
2. **直义字符串**:Oracle中,单引号包围的字符序列代表字符串,如`'Hello, World!'`。字符串还可以使用转义字符,例如`'It''s a nice day'`。 3. **NULL数据类型**:在Oracle中,`NULL`表示未知或无值,它不是...
- **SUBSTR** 函数可用于获取字符串的一部分: ``` SELECT SUBSTR(字段, LENGTH(字段) - 2) FROM 表 ``` ### 14. 获取当前系统时间点日期(不包括年月) - 使用 `SYSDATE` 函数,并结合 `TO_CHAR` 和 `SUBSTR` ...
Oracle 中的字符串连接为 string1‖string2,SQL 中为 string1+string2。 集合操作:在 SQL 中只有 UNION(并操作),Oracle 中包含 MINUS(差操作)、INTERECT(交操作)、UNION(并操作)。 索引 ---- SQL 的...
- Oracle使用‖进行字符串连接,支持MINUS、INTERSECT和UNION集合操作。 6. **索引** - SQL Server的索引包括聚集和非聚集索引,Oracle提供B+树、Bitmap、函数、反序等多种索引类型。 7. **事务处理** - SQL ...
本书在第四章中详细介绍了SQL语句的组成、基本的insert和select语句、where子句的使用、update和delete语句、数据排序、字符串函数、数字函数和聚集函数等。在此基础上,第五章深入讲解了PL/SQL编程,包括PL/SQL的...
- 转换函数:如`TO_CHAR()`(将数字或日期转换为字符串)、`TO_DATE()`(将字符串转换为日期)等。 - 条件表达式:`CASE`语句可以用来根据不同的条件返回不同的值。 ### 5. 使用分组函数报告聚集数据 (Chapter06) ...
字符串连接使用 `+` 符号。 - Oracle 支持更丰富的集合操作,如 `UNION`、`MINUS` 和 `INTERSECT`,而 SQL Server 只有 `UNION`。 7. **索引类型**: - SQL Server 有聚集索引和非聚集索引,还有全文索引。 - ...
- 遍历字符串:利用数据库函数逐个处理字符串中的字符。 - 字符串文字中包含引号:使用转义字符处理引号。 - 计算字符在字符串中出现的次数:使用LENGTH和SUBSTRING函数。 - 从字符串中删除不需要的字符:使用...
* 索引的使用:尽量使用索引,可以提高查询速度,但需要注意索引不起作用的情况,如存在数据类型隐形转换、列上有数学运算、使用不等于()运算、使用substr字符串函数、‘%’通配符在第一个字符、字符串连接(||)...
字符转换函数to_char和to_date用于在字符串和日期之间转换,to_number将字符串转为数值。此外,聚集函数如SUM、AVG、MAX、MIN和COUNT用于统计分析,但不能与WHERE子句结合在同一查询中。 在处理空值和逻辑判断时,...
第4章深入讲解了SQL:结构化查询语言,涵盖DDL、DML语句,基本的insert、select、update、delete语句,where子句的使用,数据排序,函数的使用(字符串、数字、聚集、日期),连接的使用,groupby和having子句,子...
字符型函数如ASCII、CHR、CONCAT、INITCAP、INSTR、SUBSTR等,它们在处理字符串时发挥关键作用。数值型函数如CEIL、FLOOR、ROUND、MOD、POWER等,用于对数字进行数学运算。日期型函数,如SYSDATE、SYSTIMESTAMP、ADD...