首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORACLE中的LISTAGG

ORACLE中的LISTAGG
EN

Stack Overflow用户
提问于 2016-01-28 18:19:24
回答 3查看 1.9K关注 0票数 3

我正在尝试使用LISTAGG()来获取两个以上的列。

代码语言:javascript
复制
SELECT deptname, deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees 
FROM emp 
GROUP BY deptno;

但是它抛出了这个错误:

代码语言:javascript
复制
: FROM keyword not found where expected
 00000 -  "FROM keyword not found where expected"
*Cause:    
*Action:
Error at Line: 3 Column: 12

有人能解释一下为什么会这样吗?

EN

回答 3

Stack Overflow用户

发布于 2016-01-28 18:32:02

Oracle分析函数是在Oracle11g Release 2中引入的。因此,如果你使用的是旧版本,你将无法使用它。

这个错误看起来很奇怪。您实际上应该获取ORA-00904: "DEPTNAME": invalid identifier,因为SCOTT模式中的标准EMP表没有DEPTNAME列。此外,您应该得到ORA-00979: not a GROUP BY expression,因为您没有在GROUP BY表达式中提到SELECTed列。

使用SCOTT模式中的标准EMP表:

代码语言:javascript
复制
SQL> SELECT deptno,
  2    job,
  3    LISTAGG(ename, ',') WITHIN GROUP (
  4  ORDER BY ename) AS employees
  5  FROM emp
  6  GROUP BY deptno,
  7    job;

    DEPTNO JOB       EMPLOYEES
---------- --------- ------------------------
        10 CLERK     MILLER
        10 MANAGER   CLARK
        10 PRESIDENT KING
        20 CLERK     ADAMS,SMITH
        20 ANALYST   FORD,SCOTT
        20 MANAGER   JONES
        30 CLERK     JAMES
        30 MANAGER   BLAKE
        30 SALESMAN  ALLEN,MARTIN,TURNER,WARD

9 rows selected.

SQL>
票数 3
EN

Stack Overflow用户

发布于 2016-01-28 18:30:48

尝试:

代码语言:javascript
复制
SELECT deptname, deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees 
FROM emp 
GROUP BY deptno,deptname;
票数 2
EN

Stack Overflow用户

发布于 2016-06-16 16:27:17

Oracle11g:

代码语言:javascript
复制
SELECT deptname, deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY deptno,job) AS employees 
FROM emp 
GROUP BY deptno,job;

Oracle10g:

代码语言:javascript
复制
SELECT deptname, deptno, WMSYS.WM_CONCAT(ename) AS employees 
FROM emp 
GROUP BY deptno,job;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35058645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档