oracle listagg()使用详解
时间: 2023-12-03 15:03:09 浏览: 135
Oracle 中的 LISTAGG 函数用于将多行数据连接为一行,并使用指定的分隔符分隔每个值。下面是 LISTAGG 函数的语法:
```
LISTAGG (column_name, separator) WITHIN GROUP (ORDER BY column_name)
```
其中,column_name 是要合并的列名,separator 是分隔符。可以使用 WITHIN GROUP 子句指定按照哪个列对结果进行排序。
下面是一个例子,假设有一个表格 employees,其中包含员工的姓名和所属部门:
```
+--------+-----------+
| Name | Department |
+--------+-----------+
| Alice | HR |
| Bob | Finance |
| Carol | Finance |
| Dave | IT |
| Eve | HR |
+--------+-----------+
```
现在,我们想要将每个部门的员工姓名连接起来,用逗号分隔。可以使用以下语句:
```
SELECT Department, LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) AS Employees FROM employees GROUP BY Department;
```
这将得到以下结果:
```
+-----------+-----------------+
| Department | Employees |
+-----------+-----------------+
| HR | Alice,Eve |
| Finance | Bob,Carol |
| IT | Dave |
+-----------+-----------------+
```
注意,LISTAGG 函数默认会将 NULL 值排除在外。如果希望将 NULL 值包含在结果中,可以使用 WITHIN GROUP 子句的 ON NULL 子句:
```
SELECT Department, LISTAGG(Name, ',') WITHIN GROUP (ORDER BY Name) ON NULL 'None' AS Employees FROM employees GROUP BY Department;
```
这将得到以下结果:
```
+-----------+-----------------+
| Department | Employees |
+-----------+-----------------+
| HR | Alice,Eve |
| Finance | Bob,Carol |
| IT | Dave |
| Sales | None |
+-----------+-----------------+
```
在这个例子中,如果某个部门没有员工,则将结果中的 NULL 值替换为 "None"。
阅读全文