Requête PL/SQL - SQL/NoSQL - Programmation
Marsh Posté le 13-02-2012 à 02:03:19
maalicius a écrit : En faisant : select ctpr_id, count(facility_id) from Table where run_id='11517' |
Salut
Déjà ta requête est mal formulée car elle laisse croire à ceux qui la lisent que tu veux compter les facility_id alors qu'en réalité elle compte les cptr_id identiques. Donc tu aurais pu écrire
Code :
|
ou bien encore plus simple
Code :
|
Ce qui aurait produit le même résultat.
maalicius a écrit : Mon problème est le suivant: |
Il te faut passer par un script. Lui seul peut partir d'un select pour récupérer le résultat, le modifier (car tu changes l'id) et updater la ligne... sauf si ton cptr_id est associé à un auto-incrément. Dans ce cas tu peux faire un
Code :
|
Marsh Posté le 13-02-2012 à 11:41:38
Salut,
Merci beaucoup pour ta réponse.
le count(facility_id) était fait exprès pour calculer combien il y a de facility pour chaque contreparty, mais en effet ta requête est plus juste.
Sinon j'ai réussi à trouver une solution en faisant un insert qui va créer un nouveau CTPR_ID pour chaque facility_ID.
J'ai juste un petit souci, je n'arrive à le faire pour un certain nombre de ctpr_id car la longueur est de 20 maximum et moi ce que je fait je rajoute un "||'_'||rownum".
Je ne sais pas s'il y a une solution pour régler ce petit problème sachant que je n'ai pas le droit de toucher au caractéristique des champs.
Ma solution j'ai l impression qu'elle est trop compliqué:
1- je commence par faire un insert et rajouter toutes les contreparties qui ne dépassent pas les 20 caractères.
2- je fais un update pour recopier les champs qui risquent de dépasser les 20 caractère dans un autre champs.
3- je refais l'étape 1 mais je le fais que pour les ctpr_id qui risquaient de dépasser les 20 caractères.
Si tu pense qu'il y a une autre solution, n'hésite pas. Si jamais tu as besoin de mon code actuel, je pourrai te l envoyer.
Merci d'avance
Marsh Posté le 13-02-2012 à 15:05:31
re,
Je pense que j'ai résolu le problème en une étape mais c'est quand même assez barbare mais j aurai voulu savoir s'il y a une façon plus optimisé de foruler la requète suivante :
UPDATE T1
SET (COL1,COL2,COL3...) = (SELECT COL1, COL2,COL3 FROM T2 WHERE T1.PK = T2.PK)
WHERE EXISTS (SELECT 1 FROM T2 WHERE T2.PK=T1.PK)
ça fait plus de 10 minutes que j'ai lancé la requête et c'est toujours pas fini, surtout que j ai plus d'un million de ligne, j ai peur que ça prenne toute l'après midi.
le where exists a été rajouté pour palier l'erreur 'Contraint non null'
Merci d'avance
Marsh Posté le 10-02-2012 à 11:25:54
Bonjour à tous,
Alors je me permet de vous exposer mon problème.
J'ai une table avec plusieurs champs.
Deux champs en particulier m'interessent, on va les noter champs_1="facility_id" et champs_2="ctpr_id"
avec une petite requête je trouve qu'il y a un certain nombre d'élément de champs_2 qui ont plusieurs éléments de champs_1
Je m explique:
En faisant :
select ctpr_id, count(facility_id) from Table where run_id='11517'
group by ctpr_id
je trouve:
ctpr_id count(facility_id)
_______________________________________
PA1075FL410057701### 1
MOD458230633 179
PA1000CC024822934 3
PA1000CC001177934 2
MOD458023914 1
MOD458243796 79
PA1000CC076724844 1
PA1000CC002067634 1
PA1000CC066755214 1
Je n'ai pas tout affiche.
Mon problème est le suivant:
je veux pour chaque ctpr_id tel que count(facility_id)>1 il faut que je crée une nouvelle ctpr_id dans la table que j'associerai a une facility_id de tel façon qu'à la fin en faisant le count pour chaque ctpr_id je n'aurai qu'une facility_id.
Est ce que c'est faisable qu'avec des requête sql ou faudra utiliser un script PL/SQL?
Si vous avez des pistes n'hésitez pas.
Merci pour le temps que vous allez prendre pour lire ce poste et pour vos réponses.