我正在为这个Oracle错误挠头。以下查询完美:Oracle错误 - ORA-00907:缺少右括号
SELECT
V.PROJECTID,
(SELECT WM_CONCAT(DISTINCT NAME)
FROM TPM_TRAININGPLAN JOIN TPM_DELIVERYMETHODS USING (METHODID)
WHERE PROJECTID=V.PROJECTID
AND VERSIONID=V.VERSIONID) as Methods
FROM TPM_PROJECTVERSION V
但是,我想按字母顺序返回我的concantonated列表,因为我很挑剔。你以为我会做:
SELECT
V.PROJECTID,
(SELECT WM_CONCAT(DISTINCT NAME)
FROM TPM_TRAININGPLAN JOIN TPM_DELIVERYMETHODS USING (METHODID)
WHERE PROJECTID=V.PROJECTID
AND VERSIONID=V.VERSIONID ORDER BY NAME) as Methods
FROM TPM_PROJECTVERSION V
然而,当我尝试这个,我得到的错误:
[Error] Script lines: 15-19 ------------------------
ORA-00907: missing right parenthesis
我可以在自己的SELECT语句运行查询,像这样:
SELECT WM_CONCAT(DISTINCT NAME)
FROM TPM_TRAININGPLAN JOIN TPM_DELIVERYMETHODS USING (METHODID)
WHERE PROJECTID=240
AND VERSIONID=1
ORDER BY NAME
它运行良好。我的括号比太阳马戏团队伍更加平衡。为什么错误?
我认为这是行不通的。聚合不受ORDER BY的影响。请测试它,如果需要,我会发布一个用户自定义的聚合函数来排序。不幸的是,我没有支持WM_CONCAT的版本。 – GolezTrol
等你是对的。整个观点是没有意义的,如果我将单独的示例更改为'ORDER BY NAME DESC',那么我会得到相同的结果。我只是假定它的工作原理是因为这些值是按字母顺序排列的。无论如何,我可以用一个简单的LINQ表达式对它们进行排序。 –
[本页]上的LISTAGG示例(http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php)似乎按字母顺序排序,但我对该语法不太熟悉,所以'不是当然,如果这也可以应用于WM_CONCAT。如果不是的话,你总是可以使用LISTAGG,如果这不起作用,我会在今天晚些时候发布一个解决方法。 – GolezTrol