0

派生した値でテーブル列を更新する必要があります。もう少し複雑にするために、派生物に基づいて値を連結する必要があるため、連結に追加する値は常に同じではありません。このクエリを思いついたのですが、実行に問題があるようです。

    update TRANSFER set PROCESS_STATUS = concat ( PREDICATE , 
                (select dom_value from DOMAIN_VALUES dv where dv.val_id = st.sr_cashflow_status
CASE PREDICATE WHEN dv.dom_value = 'ZZZZ' THEN 'SPB'
                         WHEN dv.dom_value = 'XXXX' THEN 'SPB'
                         WHEN dv.dom_value = 'YYYY' THEN 'SPB'
              ELSE 'DPS'
                         END ))         from TRANSFER st
    where PROCESS_STATUS is null;

私の主な問題は、結合によって取得された値でチェックできる動的な値として、アペンダー (ここでは述語) をどのように維持するかということです。

回答/指示は大歓迎です。

4

1 に答える 1

1

私はあなたが以下のようなことを達成しようとしていると思います(テーブルPREDICATEの列であると考えてTRANSFERください)-

MERGE INTO TRANSFER st 
   using (select CASE 
            WHEN dv.dom_value = 'ZZZZ' THEN 'SPB'
            WHEN dv.dom_value = 'XXXX' THEN 'SPB'
            WHEN dv.dom_value = 'YYYY' THEN 'SPB'
            ELSE 'DPS'
            END as key,
            val_id
           from DOMAIN_VALUES) dv
      on (dv.val_id = st.sr_cashflow_status and st.PROCESS_STATUS is NULL)         
    WHEN MATCHED THEN
         UPDATE SET PROCESS_STATUS = concat(PREDICATE,dv.key);

また

MERGE INTO TRANSFER st 
       using (select CASE 
                WHEN dv.dom_value = 'ZZZZ' THEN 'SPB'
                WHEN dv.dom_value = 'XXXX' THEN 'SPB'
                WHEN dv.dom_value = 'YYYY' THEN 'SPB'
                ELSE 'DPS'
                END as key,
                val_id
               from DOMAIN_VALUES) dv
          on (dv.val_id = st.sr_cashflow_status and st.PROCESS_STATUS is NULL)         
        WHEN MATCHED THEN
             UPDATE SET PROCESS_STATUS = PREDICATE||dv.key;

CASEステートメントの構文に関する簡単なメモ。CASEthis を句で使用しているため、結果を何も比較しないため、構文が正しくないように見えます。また、WHERE句も欠落していANDます。

update TRANSFER set PROCESS_STATUS = concat ( PREDICATE , 
                (select dom_value from DOMAIN_VALUES dv where dv.val_id =            st.sr_cashflow_status
                   CASE PREDICATE WHEN dv.dom_value = 'ZZZZ' THEN 'SPB' -- and clause missing
                         WHEN dv.dom_value = 'XXXX' THEN 'SPB'
                         WHEN dv.dom_value = 'YYYY' THEN 'SPB'
                   ELSE 'DPS'
                         END ))         --comparison missing like CASE ... END = 'SPB' since the case is inside WHERE
       from TRANSFER st                 -- you cannot have a FROM clause in UPDATE
    where PROCESS_STATUS is null;
于 2012-09-04T22:11:42.907 に答える