请问这个查询语句该怎么该,加order by报缺失右括号

时间:2021-06-30 20:06:30

 SELECT qu.id, qu.belong, qu.type, qu.title, qu.flag,
(SELECT wm_concat(as_num || '-' || as_info)
FROM QUESTION_ANSWER quas
WHERE quas.qu_id = qu.qu_id
order by quas.as_sort asc ) AS qu_answers
FROM QUESTION qu;



* ORA-00907: 缺失右括号
* 00907. 00000 - "missing right parenthesis"
* *Cause: 
* *Action:
想用来做视图,使用wm_concat合并子表内容并排序,加了排序order by quas.as_sort asc后报ORA-00907: 缺失右括号,
不加order by quas.as_sort asc这句的话正常,请问怎么解决

4 个解决方案

#1


很多情况下,子查询中不能有order by。
这个语句,可以想办法改成left join。

#2


不知道啥原因,不过加不加order by 排序,结果都不变
order by 是对查询后的结果集排序,不是先排序,再查询

#3


wm_concat 函数不支持排序,也就是拼接出来的结果都不固定。

如果你是 11g 的库,建议使用 listagg 函数,这个可以排序。

#4


SELECT a.id,
       a.belong,
       a.type,
       a.title,
       a.answer,
       a.flag,
       (select listagg(b.as_num || '-' || b.as_info, ',') within group(order by b.as_sort)
          from question_answer b
         where b.qu_id = a.qu_id
         ) as qu_answers
  from question a;

谢谢各位,根据版主提醒用listagg实现了

#1


很多情况下,子查询中不能有order by。
这个语句,可以想办法改成left join。

#2


不知道啥原因,不过加不加order by 排序,结果都不变
order by 是对查询后的结果集排序,不是先排序,再查询

#3


wm_concat 函数不支持排序,也就是拼接出来的结果都不固定。

如果你是 11g 的库,建议使用 listagg 函数,这个可以排序。

#4


SELECT a.id,
       a.belong,
       a.type,
       a.title,
       a.answer,
       a.flag,
       (select listagg(b.as_num || '-' || b.as_info, ',') within group(order by b.as_sort)
          from question_answer b
         where b.qu_id = a.qu_id
         ) as qu_answers
  from question a;

谢谢各位,根据版主提醒用listagg实现了