IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

QlikView Discussion :

Faire un INNER JOIN


Sujet :

QlikView

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 406
    Points : 174
    Points
    174
    Par défaut Faire un INNER JOIN
    Bonjour,

    Je bloque sur un points :
    Je cherche à faire une jointure entre deux tables afin de récupérer uniquement les valeurs correspondante.
    le hic c'est que la jointure je peux la faire entre deux champs qui ont les mêmes valeurs mais qui n'ont pas le même nom (cf schéma ci-dessous)
    Nom : Capture_table.PNG
Affichages : 250
Taille : 7,6 Ko
    Dans la table tiers j'ai des codes + tout les libellés (personne physique ou morale confondus) et dans la table entreprise j'ai que les codes.
    Je suis obligé de faire une jointure via ces codes afin de récupérer uniquement les noms des entreprises.
    En jaune les champs sur lesquelles porte les jointures(je pense).
    je me suis lancé dans un mappage + inner join. C'est la 1ere fois que je fais et j'ai trouver des infos sur le net.
    Mais quand j’exécute, ça plante mon pc. J'ai mal fait une jointure ou tout simplement je m'y prend mal.
    je sais pas si quelqu'un aurais une astuce.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    /*Mappage_tiers:
    Mapping LOAD code_tiers,
                libelle         
    FROM QVD_TIERS.qvd (qvd);
     
    temp_entreprise
    LOAD 
    	AutoNumberHash128(en_tiers,num_compte) 	as %_key_tiers_entreprise,
    	en_tiers,
    	num_compte,
    	code_tiers,
    	ApplyMap('Mappage_tiers',code_tiers,'Pas_de_nom') as Nom_entreprise
    FROM QVD_ENTREPRISE.qvd (qvd);
     
    Inner join
     
    LOAD
     code_tiers,
     libelle
     FROM QVD_TIERS.qvd (qvd);
     
     assurance:
     NoConcatenate
     	LOAD	
     		if(isnull(%_key_tiers_entreprise),'#key_tiers_entreprise',%_key_entreprise) 			AS %_key_entreprise, 
     		code_tiers,
     		libelle,
     		Nom_entreprise,
     		en_tiers,
     		num_compte
     	Resident temp_entreprise;
     	
     	drop Table temp_entreprise;
     	
     	TRACE fin telechargement entreprise;*/

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    Bonjour.
    Pourquoi ne pas simplement renommer un des deux champs du même nom que l'autre ?
    Load code_tiers as en_tiers, par exemple ...

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 406
    Points : 174
    Points
    174
    Par défaut
    Hmmmm oui j'ai essayer ce que vous avez dit , cependant il y à un MAIS.

    Si je renomme le champ code_tiers as en_tiers(ou l'inverse) j'aurai tous mes codes dans la sélection(ça c'est pas bien grave).
    Or en récupérant uniquement les libellés des codes d'entreprises que je mettrais dans une autre table ,j'arriverai à extraire les noms des personnes morales et personnes physiques.

    En gros ce que je souhaite à obtenir :
    j'ai deux zones d'affichage , une pour les personnes physiques et une pour les personnes morales.
    Avec votre solution si le code correspond à une personne physiques le libellé de la personne s'affiche dans la zone d'affichage concerné et vice versa.
    un exemple du résultat(vu sur qlik c'est pareil)
    Nom : Capture_affiche_exeple.PNG
Affichages : 228
Taille : 1,9 Ko

    Or ce que je pense faire avec le inner join, c'est récupérer les noms des personnes morales puis renommée leurs champs.
    J'aurai un champs renommée libelle_pers puis un autre raison_sociale ,ainsi dans chaque zone d'affichage je mettrais le libellé correspondant.
    ce qui sera l'inverse de l'image du dessus, c-à-d Raison sociale sera vide.
    Ainsi quand je sélectionne un code_tiers si c'est une personnes morales , la zone Nom & Prénom restera vide.

    Mon problème est que je n'ais aucun critère dans mes qvd qui me permette de dissocier une personne physique d'une personne morale, sinon j'aurai mis un flag.

    je sais pas si j'ais été assez clair et si la piste dans laquelle je me lance me le permettra.

    ps: Au vue des données que j'ai la probabilité que je tombe sur un libellé qui est à la fois personnes physiques et personnes morales est quasi nul.
    Après comment pourrais je avancé ça si j'arrive pas à les dissocier,c'est juste que pour l'instant en parcourant mon qvd avec Qviewer j'ai rien vue de tel.

  4. #4
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Si vous faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Entreprise:
    LOAD [...];
     
    Tiers:
    LOAD [...];
     
    LEFT JOIN (Entreprise)
    LOAD 
    code_tiers AS en_tiers,
    libelle AS libelle_enreprise
    RESIDENT Tiers;
    vous obtenez les noms des entreprises dans la table "Entreprise".



    Vous pouvez aussi mettre un flag "est_entreprise" dans votre table "Tiers" pour vous faciliter les choses plus tard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Entreprise:
    LOAD [...];
     
    Tiers:
    LOAD 
    code_tiers,
    libelle,
    if(exists(en_tiers, code_tiers), 1, 0) AS est_entreprise
    FROM ...;

Discussions similaires

  1. faire un INNER JOIN partiel
    Par bronon dans le forum Requêtes
    Réponses: 10
    Dernier message: 05/06/2013, 09h51
  2. Mysql Inner join
    Par ..:: Atchoum ::.. dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/10/2007, 12h21
  3. [Access 2000] Faire un INNER JOIN derrière un LET JOIN
    Par Korskarn dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/03/2006, 11h51
  4. une requête avec plusieurs INNER JOIN, cmt faire ?
    Par elhosni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/01/2006, 17h55
  5. Inner Join & Select
    Par bakaneko dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/02/2004, 10h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo