sql >> Databasteknik >  >> RDS >> Oracle

SQL-UPPDATERING i en SELECT-rankning över partitionssats

Du kan gå med i underfrågan och gör en UPPDATERING :

UPDATE table_name t2
SET t2.rank=
  SELECT t1.rank FROM(
  SELECT company,
    direction,
    type,
    YEAR,
    MONTH,
    value,
    rank() OVER (PARTITION BY direction, type, YEAR, MONTH ORDER BY value DESC) AS rank
  FROM table_name
  GROUP BY company,
    direction,
    TYPE,
    YEAR,
    MONTH,
    VALUE
  ORDER BY company,
    direction,
    TYPE,
    YEAR,
    MONTH,
    VALUE
  ) t1
WHERE t1.company = t2.company
AND t1.direction = t2.direction;

Lägg till nödvändiga villkor till predikatet.

Eller,

Du kan använda MERGE och behåll den frågan i ANVÄNDER klausul:

MERGE INTO table_name t USING
(SELECT company,
  direction,
  TYPE,
  YEAR,
  MONTH,
  VALUE,
  rank() OVER (PARTITION BY direction, TYPE, YEAR, MONTH ORDER BY VALUE DESC) AS rank
FROM table1
GROUP BY company,
  direction,
  TYPE,
  YEAR,
  MONTH,
  VALUE
ORDER BY company,
  direction,
  TYPE,
  YEAR,
  MONTH,
  VALUE
) s 
ON(t.company = s.company AND t.direction = s.direction)
WHEN MATCHED THEN
  UPDATE SET t.rank = s.rank;

Lägg till obligatoriska villkor i ON-satsen.



  1. Lär dig hur du prestandajusterar Microsoft SQL Server

  2. Hur listar man information om alla Alfrescos filer (Postgres SQL)?

  3. Escape rå SQL-frågor i Laravel 4

  4. Uppdatera en rad i ett radpar, där båda raderna tillsammans uppfyller vissa kriterier