Je me bats pour faire un script de mise à jour qui fonctionne avec les données suivantes:Mettre à jour un champ du tableau 1 en fonction des critères du tableau 2? ORACLE
TOWER_PAYMENT TABLE
==============================================================
PAY_PERIOD|TOWER_ID|APARTMENT_NUM|MONTH_PAYMENT|PAYMENT_STATUS
201703 |10 |101 |700 |NULL
201704 |10 |101 |700 |NULL
201703 |10 |102 |700 |NULL
201704 |10 |102 |700 |NULL
201703 |20 |101 |800 |NULL
201704 |20 |101 |800 |NULL
201703 |20 |102 |800 |NULL
201704 |20 |102 |800 |NULL
PAYMENT_STATUS TABLE
==============================================
PAY_PERIOD|TOWER_ID|APARTMENT_NUM|PAYMENT_DONE
201703 |10 |101 |700
201704 |10 |101 |400
201703 |10 |102 |500
201704 |10 |102 |700
201703 |20 |101 |800
Je cherche à mettre à jour le champ « PAYMENT_STATUS » avec un certain nombre en fonction de différents critères:
- Si un "APARTMENT_NUM" appartenant à un "TOWER_ID" se trouve dans la table "PAYMENT_STATUS" correspondant à "PAY_PERIOD", mettez à jour le champ "PAYMENT_STATUS" à 1.
- Si le "APARTMENT_NUM" appartenant à un "TOWER_ID" est introuvable dans la table "PAYMENT_STATUS" pour la correspondance "PAY_PERIOD", puis mise à jour le champ « PAYMENT_STATUS » à 2.
- Si le champ « APARTMENT_NUM » ont un « PAYMENT_DONE » moins que « MONTH_PAYMENT », puis mettre à jour le « PAYMENT_STATUS » à 3.
La sortie souhaitée doit être:
TOWER_PAYMENT
====================================================================
PAY_PERIOD|TOWER_ID|APARTMENT_NUM|MONTH_PAYMENT|PAYMENT_STATUS
201703 |10 |101 |700 |1
201704 |10 |101 |700 |3
201703 |10 |102 |700 |3
201704 |10 |102 |700 |1
201703 |20 |101 |800 |1
201704 |20 |101 |800 |2
201703 |20 |102 |800 |2
201704 |20 |102 |800 |2
J'ai essayé avec MERGE INTO mais je n'ai pas pu mettre à jour quand je ne correspondais pas.
Merci d'avance!
Qu'avez-vous essayé? Cela semble être assez facile en utilisant une jointure externe et une déclaration de cas. –
Ceci est un terrible modèle de données. Pourquoi affichez-vous un drapeau dans la première table, qui deviendra immédiatement incorrect lorsque quelqu'un effectue un paiement? Ou quand un de vos propres opérateurs corrigera une erreur qu'ils ont faite lorsqu'ils ont tapé les données dans la deuxième table? Pourquoi avez-vous même deux tables pour commencer - le "paiement reçu" pourrait aussi bien être dans la première table! – mathguy
1.- J'ai essayé avec MERGE INTO avec l'approche JOIN mais je n'ai pas trouvé de moyen de mettre à jour quand l'appartement ne se trouve pas sur la table PAYMENT_STATUS. 2.- Je suis actuellement bloqué avec ce modèle de données terrible, malheureusement je ne peux pas le changer :( – Rycerzfrost