2017-02-24 7 views
0

Ich versuche, eine Spalte in einer Tabelle in jeder Zeile aus einer Abfrage zu aktualisieren. Der Code, den ich habe, ist:So aktualisieren Sie mehr als eine Zeile in 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); 

Was ich versuche zu tun Update jede Zeile mit einer Zählung für jeden Elternteil id aber offensichtlich diese zurück> 1 Zeile so die Aktualisierung fehlschlägt. Also, ich kann das mit diesem SQL-Code nicht machen.

Wie kann ich dies tun, damit jede Zeile mit einer Anzahl von Eltern-IDs aktualisiert wird?

+0

Sie bitten uns, Ihre Anforderung von Code zu erraten, der sie NICHT erfüllt. So kann es nicht funktionieren. Welche Tabellen (Tabellennamen, Spaltennamen und Datentypen) sind an dem Problem beteiligt und was möchten Sie aktualisieren? Bitte geben Sie das in Englisch an, nicht in Code. – mathguy

Antwort

0

Sie haben SELECT COUNT(x) GROUP BY x Ich denke, was Sie brauchen, ist diese Abfrage zu korrelieren und haben es nur eine Zeile zurückgeben:

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

auf diese Weise die Unterabfrage zurückkehr nur eine einzige Zeile zu der Reihe entsprechenden Sie aktualisieren.

+0

Ja, das würde für eine Zeile funktionieren. Das Problem ist, dass ich jede Zeile mit einem Gesamtwert aktualisieren muss, der nach dem Elternelement in jeder Zeile der CUSTOM_ISR_ASSET_DETAILS-Tabelle gruppiert ist. – user2284341

+0

Diese Anweisung wird alle Zeilen aktualisieren, korrelieren die rechte Seite ist der Schlüssel. –

1

Bitte verwenden Sie merge Anweisung. Das wäre so etwas wie:

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; 

Ich bin nicht in der Lage zu definieren, was Join-Bedingung ist. Ich schätze auf Spalte, wo Wert 'standard' stammt.

+0

Danke Kacper, du hast mich auf den richtigen Weg gebracht. – user2284341

Verwandte Themen