2017-02-24 5 views
0

クエリの各行の表の列を更新しようとしています。私が持っているコードは次のとおりです。pl/sqlで複数の行を更新する方法

UPDATE CUSTOM_ISR_ASSET_DETAILS SET COUNTSYSTEMASSETS = (Select Count(PARENT_ID) as COUNTSYSTEMASSETS 
           from PM_ENTITY 
           inner join 
           (SELECT 
           pm_entity.PM_ENTITY_ID, 
           response_text.response_text 
           FROM pm_entity 
           INNER JOIN response_text 
           ON pm_entity.pm_entity_id=response_text.parent_id 
           AND response_text.question_id = '000ZLIJCA0003MI82Z000UWLUTG000000P4V') TBL_StandardRollup 
           on PM_ENTITY.PM_ENTITY_ID = TBL_StandardRollup.PM_ENTITY_ID 
           WHERE (TBL_StandardRollup.response_text = 'Standard') 
           group by PARENT_ID); 

私がやろうとしているどのようなアップデートが失敗したので、明らかに、これは> 1行を返し、それぞれの親IDのカウントで、各行の更新ですが。だから、私はこのSQLコードでこれを行うことはできません。

各行が親IDの数で更新されるようにするにはどうすればよいですか?あなたは私はあなたが必要なものSELECT COUNT(x) GROUP BY x考える必要があり

+0

要件を満たしていないコードから要件を推測するようにお願いしています。そんなことはできません。問題に関係するテーブル(テーブル名、列名、データ型)とは何ですか?また、更新しようとしているものは何ですか?それをコードではなく、簡単な英語で書いてください。 – mathguy

答えて

0

は、そのクエリを相関し、それが1行のみを戻すことです。

UPDATE CUSTOM_ISR_ASSET_DETAILS 
SET COUNTSYSTEMASSETS = (
    SELECT Count(PARENT_ID) 
    FROM whatever 
    WHERE whatever.PARENT_ID = CUSTOM_ISR_ASSET_DETAILS.PARENT_ID) ; 

サブクエリが更新している行に対応する唯一の単一の行を返してその方法。

+0

はい、それは1つの行に対して機能します。問題は、CUSTOM_ISR_ASSET_DETAILSテーブルの各行で親によってグループ化された合計値で各行を更新する必要があることです。 – user2284341

+0

そのステートメントはすべての行を更新し、右側がキーです。 –

1

mergeをご利用ください。これは次のようなものです:

merge into CUSTOM_ISR_ASSET_DETAILS c 
using (/*YOUR SUB_QUERY*/) d 
on (d.response_text = c./*what column 'standard' come from*/) 
when matched then update set COUNTSYSTEMASSETS = d.COUNTSYSTEMASSETS; 

私は結合条件を定義することができません。私は値'standard'から来る列にあると思います。

+0

ありがとうKacper、あなたは私を正しい軌道に乗せました。 – user2284341

関連する問題