sql >> Database >  >> RDS >> Oracle

Oracle Meerdere update-query

Het volgende gaat ervan uit dat een ITEM_CODE is toegewezen aan slechts één DEPARTMENT_CODE, omdat het eenvoudig is en u ons geen verdere bedrijfsregels hebt gegeven. Als deze veronderstelling onjuist is, moet u de logica dienovereenkomstig aanpassen.

Ik heb ook uw eis opgenomen dat de bestaande waarde van COMPETITOT.COMPETITOR_CODE onbetrouwbaar is.

Gezien deze testdatum:

SQL> select * from competitor
  2  /

STORE_CODE  ITEM_CODE DEPARTMENT_CODE COMPETITOR
---------- ---------- --------------- ----------
        11     912003              14 01
        11     912003              14 04
        11     912003              14 03
        11     912004              14 01
        11     912004              14 02
        11     912004              14 04
        11     914001              14 01
        11     914001              14 02
        11     914001              14 05

9 rows selected.

SQL>

We kunnen een analytische ROW_NUMBER() gebruiken om de benodigde handle voor COMPETITOR_CODE te genereren:

SQL> update competitor c
  2  set competitor_code =
  3          (select decode (dr
  4                         , 1, 'Comp_1'
  5                         , 2, 'Comp_2'
  6                         , 3, 'Comp_3')
  7             from ( select row_number() over ( partition by x.item_code
  8                                                  order by x.rowid ) as dr
  9                           , x.rowid as row_id
 10                    from competitor x
 11                    where x.item_code in ( select item_code
 12                                           from item
 13                                           where  department_code = 14 ) ) l
 14             where c.rowid = l.rowid )
 15  /

9 rows updated.

SQL>

En dit is het gewenste resultaat (behoudens verdere aanvullingen op de bedrijfsregels):

SQL> select * from competitor
  2  /

STORE_CODE  ITEM_CODE DEPARTMENT_CODE COMPETITOR
---------- ---------- --------------- ----------
        11     912003              14 Comp_1
        11     912003              14 Comp_2
        11     912003              14 Comp_3
        11     912004              14 Comp_1
        11     912004              14 Comp_2
        11     912004              14 Comp_3
        11     914001              14 Comp_1
        11     914001              14 Comp_2
        11     914001              14 Comp_3

9 rows selected.

SQL>



  1. wat is het verschil tussen GROUP BY en ORDER BY in sql

  2. Kolom ongeldig in de selectielijst omdat deze niet is opgenomen in een aggregatiefunctie of de GROUP BY-component

  3. 5 praktische databasetips voor beginners

  4. psycopg2 E' op tafel, veld en schema