J'ai une table:
ID DATE RANGE STATUS -------------------------------------------- 123 30-SEP-2019 000 C 123 30-SEP-2019 001 NULL 345 25-SEP-2019 000 C 345 30-SEP-2019 001 NULL 567 30-SEP-2019 000 C 567 30-SEP-2019 001 NULL 789 27-SEP-2019 000 C 789 30-SEP-2019 001 NULL
Enregistrements avec le même ID (par exemple, 123) considérés comme le même enregistrement avec une PLAGE différente. Je dois mettre à jour le STATUS des enregistrements 001 RANGE sur Y pour lequel l'enregistrement 000 RANGE doit avoir la date 30-SEP-2019.
Ex. La requête de mise à jour doit mettre à jour le STATUS à 'Y' pour l'enregistrement avec l'ID - '123' et RANGE - '001', car pour l'ID - '123' avec le RANGE - la DATE de l'enregistrement '000' est '30 -SEP- 2019 '. Il doit également mettre à jour le STATUS de l'enregistrement 001 RANGE avec l'ID - 567.
Il ne doit pas mettre à jour le STATUS de 001 RANGE pour les ID 789 et 345, car la DATE de l'enregistrement 000 RANGE n'est pas égale à 30 -SEP-2019.
Comment puis-je y parvenir?
3 Réponses :
Une sous-requête corrélée avec filtrage me vient à l'esprit:
update t set status = (select t2.status from t t2 where t2.id = t.id and t2.range = '000' ) where date = '2019-09-30' and range = '001';
Merci pour votre réponse, mais désolé la question était erronée, je dois mettre à jour le statut comme Y
Alternativement, si la réponse de Gordon est correcte, vous pouvez utiliser un JOIN
:
UPDATE T1 SET status = T2.Status FROM YourTable T1 JOIN YourTable T2 ON t1.id = t2.id WHERE T1.[date] = '20190930' AND T1.range = '001' AND T2.range = '000';
Faites une mise à jour avec une auto-jointure:
ID | DATE | RANGE | STATUS --: | :---------- | ----: | :----- 123 | 30-SEP-2019 | 0 | C 123 | 30-SEP-2019 | 1 | Y 345 | 25-SEP-2019 | 0 | C 345 | 30-SEP-2019 | 1 | null 567 | 30-SEP-2019 | 0 | C 567 | 30-SEP-2019 | 1 | Y 789 | 27-SEP-2019 | 0 | C 789 | 30-SEP-2019 | 1 | null
Vous pouvez ajouter des conditions dans une clause WHERE spécifiquement pour les plages que vous souhaitez modifier comme:
WHERE t.range = '001' and tt.range = '000'