2016-10-18 25 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