sql >> Databasteknik >  >> RDS >> Oracle

Oracle Multiple Update Query

Följande förutsätter att en ITEM_CODE är tilldelad endast en DEPARTMENT_CODE, eftersom det är enkelt och du inte har gett oss några ytterligare affärsregler. Om detta antagande är fel måste du justera logiken därefter.

Jag har också införlivat ditt krav på att det befintliga värdet för COMPETITOT.COMPETITOR_CODE är opålitligt.

Med tanke på detta 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>

Vi kan använda en analytisk ROW_NUMBER() för att generera det nödvändiga handtaget för COMPETITOR_CODE:

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>

Och detta är det önskade resultatet (förutom ytterligare tillägg till affärsreglerna):

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. Bearbetning av MySQL resulterar i bash

  2. Varför auto_increment-id inte ökar en efter en, hur ställer jag in det?

  3. Hur man väljer det minsta värdet från flera kolumner med PHP

  4. PostgreSQL IF uttalande