6 Replies Latest reply: Feb 6, 2014 11:14 AM by fong quentin RSS

    Sélection de valeur distinct

      Bonjour à tous,

       

      Je rencontre des difficultés dans la sélection de données. La situation est la suivante :

      Dans une base de données .mdb il y a 2 tables, T1 et T2, dont la structure est :

      T1                    T2

      ID     col1          ID     col2

      1     data1          1     yop1

      2     data2          3     yop3

      3     data3

      4     data4

       

      Je voudrais obtenir une table TF dont la structure est :

      TF

      ID     col1     col2

      1     data1     yop1

      3     data3     yop3

       

      Je ne parviens pas à mettre en œuvre les solutions distinct, ou autre...

       

      Pouvez-vous m'aider ?

       

      Merci d'avance,

       

      QF

        • Re: Sélection de valeur distinct

          Il faut d'abord charger la table T1

          puis faire un right (ou INNER) Join

           

          Table1:

          LOAD * from ... ;

           

          Inner Join (table1)

          LOAD * FROM ...

           

          Fabrice

            • Re: Sélection de valeur distinct

              Bonjour et merci pour votre réponse.

               

              Je vous joins une copie d'écran ainsi qu'un extrait du code :

               

               

              table1:

              SQL SELECT `ID_AGENT` as AGE_ID_AGENT

              FROM Agent;

              store table1 into table1.qvd;

               

              table2:

              SQL SELECT `ID_AGENT` as EFF_ID_AGENT

              FROM Effectue;

              store table2 into table2.qvd;

               

              table3:

              LOAD AGE_ID_AGENT as SH

              FROM

              table1.qvd

              (qvd);

               

              right join(table3)

               

              LOAD EFF_ID_AGENT as SH

              FROM

              table2.qvd

              (qvd);

               

              Je voudrais voir dans la table SH uniquement les valeurs présentes dans AGE_ID_AGENT et qui ne sont pas présentes dans EFF_ID_AGENT. Par exemple dans la table SH je ne veux voir que la valeur 15 (et d'autres plus bas dans la liste) et je ne veux pas y voir les valeurs 25 32 40 68 etc…

               

              Il y a manifestement quelque chose que je n'ai pas compris…

               

              Merci pour vos lumières !

                • Re: Sélection de valeur distinct

                  En fait, la jointure ne peut se faire que si le nom des champs est identique. C'est comme ça que QV fait ses associations. Si aucun champ, un simple JOIN va créer un nombre de lignes = au produit cartésien des deux tables.

                   

                  Puisque le nom des champs est différents, car renommés par AS, il faut utiliser une autre fonction Exists():

                   

                  LOAD ...

                  WHERE exists(AGE_ID_AGENT, EFF_ID_AGENT);

                   

                  Fabrice

                    • Re: Sélection de valeur distinct

                      Est-ce que j'applique correctement la syntaxe ? Manifestement non car j'obtiens le même résultat

                      table3:

                      LOAD AGE_ID_AGENT as SH

                      FROM

                      table1.qvd

                      (qvd);

                       

                      LOAD EFF_ID_AGENT as SH

                      FROM

                      table2.qvd

                      (qvd)

                       

                       

                      WHERE exists(table1.SH, table2.SH);

                      //WHERE exists(AGE_ID_AGENT, EFF_ID_AGENT);

                       

                      J'ai horreur qu'on me mâche le travail mais là, je suis dans le brouillard !

                        • Re: Sélection de valeur distinct

                          Puisque la table3 ne doit contenir que certaines valeurs chargées par ailleurs, inutile de recharger le qvd en premier (puisque vous ne les voulez pas):

                          table3:

                          LOAD EFF_ID_AGENT as SH

                          FROM

                          table2.qvd

                          (qvd)

                          WHERE NOT exists(AGE_ID_AGENT, EFF_ID_AGENT);

                           

                          Dans QV, un champ existe sans être forcément relié à une table. Dans le sens, où les valeurs de ce champ, sont l'ensemble des valeurs de ce champ dans les différentes tables.

                           

                          Fabrice

                            • Re: Sélection de valeur distinct

                              Merci pour vos réponses, et excusez-moi de répondre seulement maintenant.

                               

                              En fin de compte j'ai trouvé un solution pas très académique :

                               

                              SH:

                              SQL SELECT

                                  ID_AGENT,

                                  ID_AGENT as A_ID_AGENT,

                                  ID_AGENT as ID_AGENT_SH

                              from Agent;

                              Concatenate(SH)

                              SQL SELECT

                                  ID_AGENT as E_ID_AGENT,

                                  ID_AGENT as ID_AGENT_SH

                              from Effectue;

                              STORE SH into QVD/SH.qvd;

                               

                              Il y a plus de valeurs dans le champ A_ID_AGENT que dans le champ E_ID_AGENT.

                               

                              J'ai posé les 3 champs sur la feuille QlikView, et j'ai sélectionné toutes les valeurs du champs E_ID_AGENT.

                              Désormais, dans le champs ID_AGENT_SH, apparaissent en blanc, toutes les valeurs compatible avec E_ID_AGENT, et en gris, toutes les valeurs incompatible avec E_ID_AGENT, et donc présents dans A_ID_AGENT.

                               

                              Il ne me reste plus qu'à sélectionner toutes les valeurs exclues dans ID_AGENT_SH, et j'obtiens ainsi tous les ID présents dans A_ID_AGENT mais absent dans E_ID_AGENT, ce que je cherche à faire depuis le début.

                               

                              Si cette astuce peut servir à d'autre, tant mieux !

                               

                              Cordialement, QF