Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

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

6 Replies
Not applicable
Author

Il faut d'abord charger la table T1

puis faire un right (ou INNER) Join

Table1:

LOAD * from ... ;

Inner Join (table1)

LOAD * FROM ...

Fabrice

Not applicable
Author

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 !

Not applicable
Author

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

Not applicable
Author

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 !

Not applicable
Author

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

Not applicable
Author

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