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.