我有以下查询:Oracle的哪些SKU支持WM_CONCAT?
SELECT wm_concat(DISTINCT NAME) as Methods FROM TPM_TRAININGPLAN
JOIN TPM_DELIVERYMETHODS USING (METHODID)
WHERE PROJECTID=735 AND VERSIONID=1
ORDER BY NAME
在我们的生产数据库(一些超级昂贵的Oracle SKU,成本比我家*以上),则返回:
I/OLT,ILT-WEB,OLT,QRG
然而,在我的本地Oracle Express实例(11克),我使用的发展,我得到的错误:
>[Error] Script lines: 13-16 ------------------------
ORA-00904: "WM_CONCAT": invalid identifier
Script line 13, statement line 1, column 7
Oracle是否快递不支持这一点,还是有一个变通(如因为我可以从我们的生产服务器复制功能,或运行一些脚本来“模仿”它?)谢谢!
*没有认真,它实际上比我的房子花费更多。
UPDATE:
至于建议,我试过LISTAGG功能(这的确是包含在这两个快递11g和“我们要购买的Oracle许可证或第二游艇” SKU这似乎差不多的工作。 ,但有一些缺点,我不能找到一个很好的解决办法首先,查询:
SELECT LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY NAME) Methods FROM
TPM_TRAININGPLAN
JOIN TPM_DELIVERYMETHODS USING (METHODID) WHERE PROJECTID=240 AND VERSIONID=1
返回结果:
COMM,COMM,ILT-F2F,ILT-F2F,ILT-F2F,ILT-F2F,ILT-F2F
但是,我想删除这些蠢事。更改NAME
到DISTINCT NAME
将抛出错误DISTINCT option not allowed for this function
那么大,我们就折腾了CTE在那里:
WITH Methods AS
(SELECT DISTINCT NAME
FROM TPM_TRAININGPLAN
JOIN TPM_DELIVERYMETHODS USING (METHODID) WHERE PROJECTID=240 AND VERSIONID=1)
SELECT LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY NAME) Methods FROM Methods
这工作,但我忘了提,我跑这整个事情在更大的查询中嵌套选择。看起来你可以嵌套选择包含一个CTE,但是在查询中,你不能再引用根查询,只能引用CTE。所以现在我不能用我所在的行取代240和1。
什么是* Oracle SKU *? –
http://en.wikipedia.org/wiki/Stock-keeping_unit –
@MikeChristensen我不是这样说的:“所以现在我不能用我所在的行取代240和1。”您是否需要将projectId和/或versionId上的聚合分组? – Harrison