sql >> Databáze >  >> RDS >> Oracle

Oracle Multiple Update Query

Následující předpokládá, že ITEM_CODE je přiřazen pouze jednomu DEPARTMENT_CODE, protože je to jednoduché a nedali jste nám žádná další obchodní pravidla. Pokud je tento předpoklad nesprávný, budete muset odpovídajícím způsobem upravit logiku.

Zahrnul jsem také váš požadavek, že stávající hodnota COMPETITOT.COMPETITOR_CODE je nespolehlivá.

Vzhledem k tomuto datu testu:

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>

Můžeme použít analytické ROW_NUMBER() k vygenerování potřebného úchytu pro 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>

A toto je požadovaný výsledek (s výjimkou jakýchkoli dalších dodatků k obchodním pravidlům):

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. chyba mysql při vkládání obrázku do databáze mysql

  2. Časté chyby DBA v MS SQL Server

  3. způsoby, jak se vyhnout globálním dočasným tabulkám v oracle

  4. ORACLE:Použití CTE (Common Table Expressions) s PL/SQL