|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2009 Messages : 48 ![]() |
Bonjour,
Je rencontre un petit problème que je vais essayer de vous exposer clairement: 2 tables Sources (A&B)(postgresql) 1 tmap 1 table destination (C) (Sql 2005) Structure des tables : 1ere table (A): Id_Contrat|NomContrat|Total 2eme Table(B): id|f_idContrat|TypeFin|NbInd|NbColl 3eme Table (C) : Id_contrat|Type1|Type2|Type3| Type4|Nb1|Nb2|Nb3|Nb4 Exemple de données : Table A : 3030|Titi|45 3245|Toto|36 3438|Tata|60 Table B : 112|3030|1|0|45 113|3245|1|12|0 114|3245|2|24|0 234|3438|1|0|46 452|3438|2|0|2 963|3438|3|0|12 Et le but du « jeu » c’est de mettre à jour la table C avec les données provenant de la table B & A en fonction de Id_contrat (A): C.Id_Contrat = A.Id_Contrat C.type1=B.TypeFin C.type2= B.TypeFin C.Type3= B.TypeFin C.Type4= B.TypeFin C.nb1= NbInd ou NbColl (si l’un est égal à 0 prendre l’autre) C.nb2= NbInd ou NbColl(si l’un est égal à 0 prendre l’autre) C.nb3= NbInd ou NbColl(si l’un est égal à 0 prendre l’autre) C.nb4= NbInd ou NbColl(si l’un est égal à 0 prendre l’autre) Voici ce que j’ai fait : Mes 2 tables(A+B) en entrée reliées au Tmap, le tmap relié à ma table (C) en sortie Jointure entre A & B de : A.Id_Contrat=B.F_idContrat ==> Toutes les Correspondances + InnerJoin Je n’arrive pas à remplir ma table (C) de cette manière : Id_contrat|Type1|Type2|Type3| Type4|Nb1|Nb2|Nb3|Nb4 3438|1|2|3|Null|46|2|12|null 3030|1|null| null| null|45| null| null| null 3245|1|2|null|null|12|24|null|null Etc.. Est-il possible d’arriver à ce résultat ? et si oui quelle est la méthodologie pour y parvenir. Merci à vous. |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Bonjour,
Tu pourrais utiliser un tDenormlizeRow après ton tMap afin de récupérer sur la même ligne tous les types et valeurs d'un même contrat. (Dénormalisation sur les champs type et nb) Ensuite pour remplir les champs typen et nbn de ta table, il suffit de parser les 2 champs que tu as récupérés de la dénormalisation. Nicolas |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : août 2009 Messages : 48 ![]() |
Merci de ta réponse mais je ne comprends pas tout. Il doit manquer un Tmap apres le Tdenormlize car je dois faire un Update sur la table sur des champs bien spécifiques.
Tpostgresqlinput1--Main------> Tpostgresqlinput2-Lookup----->Tmap -->Tdenormalize ---> TmssqlOutput lorsque je fais ça j'ai un message d'erreur de compilation "Impossible de convertir String en Integer Bref admettons, j'ai tout transformé en String et j'ai mis dans tlogRow : id_contrat|B.typeFin|B.NbInd|NbColl 3438|1;3;5 ==> Apres comment je fais pour lui dire que la valeur : 1 -> C.type1 3 -> C.type2 5 -> C.Type3 etc. Peux tu m'eclairer merci d'avance |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Etienne MenuetInscription : mai 2010 Messages : 75 ![]() |
Bonjour,
Le tDenormalize ne prend que des colonnes de type String. Donc quand tu lis ton fichier tu dois typer tes colonnes en String. Tu rajoutes le composant tConvertType en mode conversion automatique avant d'insérer en base pour avoir des Integer a la fin. |
|
|
00
|
|
|
#5 | ||
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Et donc une fois que tu as réglé tes problèmes de conversion, tu peux utiliser la méthode split pour récupérer chaque valeur :
Code :
|
||
|
|
00
|
|
|
#6 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : août 2009 Messages : 48 ![]() |
ca y est ça fonctionne ...
merci à tous les 2 pour votre aide. au final ça donne : tPostgresqlInput1(A) & tPostgresqlInput2(B) --> Tmap --> Tdenormalize--> Tmap-->TmssqlOutput(C) Dans le TmssqlOutput sur les champs concernés : Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com