【问题标题】:UPDATE using a WITHIN GROUP使用组内更新
【发布时间】:2016-10-18 19:37:45
【问题描述】:

我已经编写了以下语句,它以我需要更新另一个表的格式返回数据,但是我正在努力更新

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:此处不允许组功能”错误。我不确定如何删除组功能但保留我需要的数据格式?

【问题讨论】:

    标签: oracle group-by listagg


    【解决方案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 
                     );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2015-06-23
      • 2021-03-06
      • 1970-01-01
      • 2019-10-17
      相关资源
      最近更新 更多