我正在尝试使用LISTAGG()来获取两个以上的列。
SELECT deptname, deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
FROM emp
GROUP BY deptno;但是它抛出了这个错误:
: FROM keyword not found where expected
00000 - "FROM keyword not found where expected"
*Cause:
*Action:
Error at Line: 3 Column: 12有人能解释一下为什么会这样吗?
发布于 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表:
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>发布于 2016-01-28 18:30:48
尝试:
SELECT deptname, deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
FROM emp
GROUP BY deptno,deptname;发布于 2016-06-16 16:27:17
Oracle11g:
SELECT deptname, deptno, LISTAGG(ename, ',') WITHIN GROUP (ORDER BY deptno,job) AS employees
FROM emp
GROUP BY deptno,job;Oracle10g:
SELECT deptname, deptno, WMSYS.WM_CONCAT(ename) AS employees
FROM emp
GROUP BY deptno,job;https://stackoverflow.com/questions/35058645
复制相似问题