oracle对于唯一标识一致,组合其他列的数据使用wm_concat函数可拼接
| 报告编码(bgbm) | 检查部位(jcbwmc) |
|---|---|
| 00001 | 胸部 |
| 00001 | 腹部 |
| 00001 | 腰部 |
select t.bgbm,wm_concat(jcbwmc) as bwmc from hc_jcbg t where t.bgbm ='00001' group by t.bgbm;
查询结果:
| bgbm | bwmc |
|---|---|
| 00001 | 胸部,腹部,腰部 |
使用wm_concat出现中文乱码时
针对oracle拼接函数的乱码,首先查询一下oracle字符的编码是否支持中文,查询语句:
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = ‘NLS_CHARACTERSET’;
如果是中文的,则选择另一种方式:
wmsys.wm_concat(to_char(….))..应该加上to_char()
在拼接的字段加上转换就可以了.
Oracle 函数xmlagg拼接 xmlagg(xmlparse(content 合并字段||’,’ wellformed) order by 排序字段).getclobval()
oracle的 listagg() WITHIN GROUP ()函数使用
1.使用条件查询 查询部门为20的员工列表
-- 查询部门为20的员工列表
SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO = '20' ;
2.使用 listagg() WITHIN GROUP () 将多行合并成一行
SELECT
T .DEPTNO,
listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) names
FROM
SCOTT.EMP T
WHERE
T .DEPTNO = '20'
GROUP BY
T .DEPTNO
3. 使用 listagg() within GROUP () over 将多行记录在一行显示
SELECT
T .DEPTNO,
listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) over(PARTITION BY T .DEPTNO)
FROM
SCOTT.EMP T
WHERE
T .DEPTNO = '20'