sql >> Database teknologi >  >> RDS >> Oracle

Oracle Multiple Update Query

Det følgende forudsætter, at en ITEM_CODE kun er tildelt én DEPARTMENT_CODE, fordi det er enkelt, og du ikke har givet os yderligere forretningsregler. Hvis denne antagelse er forkert, bliver du nødt til at justere logikken i overensstemmelse hermed.

Jeg har også indarbejdet dit krav om, at den eksisterende værdi af COMPETITOT.COMPETITOR_CODE er upålidelig.

Givet denne testdato:

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 bruge en analytisk ROW_NUMBER() til at generere det nødvendige håndtag for 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>

Og dette er det ønskede resultat (med forbehold for yderligere tilføjelser til forretningsreglerne):

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. Top 9 database management systemer til Joomla skabeloner

  2. I mysql eller postgres, er der en grænse for størrelsen af ​​en IN (1,2,n) sætning?

  3. Få antallet af cifre efter decimalpunktet for en flyder (med eller uden decimaldel)

  4. Flere indsæt/opdater sætninger i trigger?