2016-10-18 33 views
0

我已经写了下面的语句返回的格式我需要但我与更新挣扎UPDATE使用WITHIN GROUP

SELECT element_id, 
    LISTAGG(cast(0 as varchar2(20))||', '|| VALUE, ' | ') WITHIN GROUP (ORDER BY display_order) 
FROM EDRN.MD$$_ELEMENT_VALUES 
WHERE element_id IN 
    (SELECT element_id FROM EDRN_NEW.DATA_DICTIONARY) 
GROUP BY element_id; 

我做了一个基本转换成更新另一个表中的数据UPDATE语句

UPDATE EDRN_NEW.DATA_DICTIONARY 
SET Choices = (LISTAGG(CAST(0 AS VARCHAR2(20))||', '|| VALUE, ' | ') WITHIN GROUP (ORDER BY display_order) 
FROM EDRN.MD$$_ELEMENT_VALUES 
WHERE element_id IN 
    (SELECT element_id FROM EDRN_NEW.DATA_DICTIONARY) 
GROUP BY element_id); 

收到“ORA-00934:组函数在这里是不允许的”错误。我不确定如何删除组功能,但保留我需要的数据格式?

回答

1

您需要一个子查询才能使用listagg()。在这种情况下,相关的子查询:

update EDRN_NEW.DATA_DICTIONARY dd 
    set choices = (SELECT LISTAGG(cast(0 as varchar2(20))||', '|| VALUE, ' | ') WITHIN GROUP (ORDER BY display_order) 
        FROM EDRN.MD$$_ELEMENT_VALUES ev 
        WHERE ev.element_id = dd.element_id 
       ) 
    where exists (select 1 
        from EDRN.MD$$_ELEMENT_VALUES ev 
        where ev.element_id = dd.element_id 
       ); 
+0

谢谢戈登 – phemor