Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn nhiều cập nhật Oracle

Điều sau giả định rằng ITEM_CODE chỉ được chỉ định cho một DEPARTMENT_CODE, bởi vì nó đơn giản và bạn chưa cung cấp thêm cho chúng tôi bất kỳ quy tắc kinh doanh nào. Giả định này là sai, bạn sẽ cần phải điều chỉnh logic cho phù hợp.

Tôi cũng đã kết hợp yêu cầu của bạn rằng giá trị hiện có của COMPETITOT.COMPETITOR_CODE là không đáng tin cậy.

Với ngày kiểm tra này:

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>

Chúng tôi có thể sử dụng ROW_NUMBER () phân tích để tạo xử lý cần thiết cho 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>

Và đây là kết quả mong muốn (trừ bất kỳ bổ sung nào thêm vào các quy tắc kinh doanh):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn nhiều lần trong Oracle bằng perl chỉ trả về truy vấn đầu tiên

  2. XML Oracle:Trích xuất nhiều nút con

  3. Tại sao tôi nhận được lỗi này? Không thể chèn null vào 'VALUE.VALUE_TX'

  4. Hai khóa ngoại thay vì khóa chính

  5. Làm cách nào để lấy tham số đầu ra thủ tục được lưu trữ là một mảng để hoạt động?