1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
UPDATE [MA_TABLE] m
SET m.[MON_CHAMP] =
(
SELECT
CASE
WHEN FIELD1 = '[VALEUR_TEST]'
THEN decode(RANG,1,1,4)
ELSE decode(RANG,1,1,3)
END
FROM (
SELECT [KEY], m1.FIELD1, m1.FIELD2, m1.FIELD3, m1.FIELD4,
CASE
WHEN m1.CTR_ORI_COD = '[VALEUR_TEST]'
THEN
(RANK() OVER (PARTITION BY m1.FIELD1, m1.FIELD2, m1.FIELD3, m1.FIELD4 ORDER BY m1.[KEY] DESC))
ELSE
(RANK() OVER (PARTITION BY m1.FIELD1, m1.FIELD2, m1.FIELD3, m1.FIELD4 ORDER BY m1.[KEY] ASC))
END as RANG
FROM [MA_TABLE] m1,
(
SELECT FIELD1, FIELD2, FIELD3, IELD4, count([KEY]) as NB_KEYS
FROM [MA_TABLE]
GROUP BY FIELD1, FIELD2, FIELD3, FIELD4
HAVING count([KEY]) > 1
) m2
WHERE m1.FIELD1 = m2.FIELD1
AND m1.FIELD2 = m2.FIELD2
AND m1.FIELD3 = m2.FIELD3
) md
WHERE md.[KEY] = m.[KEY]
)
WHERE EXISTS (
SELECT 1
FROM (
SELECT m1.[KEY] as DOUBLON
FROM [MA_TABLE] m1,
(
SELECT FIELD1, FIELD2, FIELD3, FIELD4, count([KEY]) as NB_KEYS
FROM [MA_TABLE]
GROUP BY FIELD1, FIELD2, FIELD3, FIELD4
HAVING count([KEY]) > 1
) m2
WHERE m1.FIELD1 = m2.FIELD1
AND m1.FIELD2 = m2.FIELD2
AND m1.FIELD3 = m2.FIELD3
)
WHERE [KEY] = DOUBLON
) |