9 Replies Latest reply: Sep 20, 2013 2:27 PM by Antoine Frangieh RSS

    Condition If et jointure sur tables

      Bonjour,

       

      Je veux savoir comment peut-on faire une condition "if" dans un script de chargement en faisant la jointure de deux tables.

       

      Je vous explique: J'ai deux tables HEADERS et PARTIES. La table Headers contient des informations sur des commandes, parmi les attributs, on trouve "Client Final" qui est renseigné en alphanumérique ... Ce champ peut aussi contenir des valeurs numériques.

       

      Dans ce cas, on doit procéder de façon à ce qu'on change les camps numériques par une valeur numérique en faisant une jointure avec la table PARTIES sur le champ HEADERS.ClientFinal = PARTIES.PartyID

       

      Je me demande comment je peux procéder, au niveau du script de chargement en premier lieu ... comment faire mes jointures ?

       

      Comment je peux détecter que le champ est numérique ?

       

      En pièce jointe, une image explicative ... Si je fais la commande sur Oracle:

       

      select  *

      from    headers h, lines l, parties p

      where   h.header_id = l.header_id

      and     h.clientfinal= p.party_id

      and     h.attribute4='102488';

       

      J'obtiens ClientFinal=Aéroport de Bangkok.

       

      Est ce que quelqu'un aura des pistes qui m'aideront à faire ceci SVP ?

       

      Merci.

        • Re: Condition If et jointure sur tables
          Kaushik Solanki

          Salut,

           

          Vous pouvez détecter la valeur du champ est numérique ou non en utilisant la fonction "isnum ()".

           

          Cordialement,

          Kaushik Solanki

          • Re: Condition If et jointure sur tables
            Kaushik Solanki

            Salut,

             

            Isnum est une fonction QlikView pas le SQL.

             

            vous avez utilisé dans le sql et donc il ne fonctionne pas.

             

            essayer isnumeric () dans SQL.

             

            Cordialement,

            Kaushik Solanki

            • Re: Condition If et jointure sur tables
              Kaushik Solanki

              Salut,

               

              Vous avez utilisé dans QlikView aucun doute à ce sujet, mais quand vous écrivez requête SQL comme "select", puis toutes les fonctions que vous avez utilisé dans ce qui devrait être acceptable par votre base de données, la cause la requête sera tiré sur base pas dans QlikView.

               

              Si vous utilisez cette déclaration avec la charge et charger des données à partir d'Excel ou QVD puis il est dit pour être tiré sur QlikView.

               

              J'espère que c'est clair.

               

              Cordialement,

              Kaushik Solanki

                • Re: Condition If et jointure sur tables

                  J'essaie de comprendre

                   

                  Merci pour votre réponse. Est ce que vous avez des pistes sur comment je peux procéder ? sachant que je suis sur Oracle et que la fonction isNumeric() n'existe pas sur Oracle.

                   

                  Je suis vraiment novice sur l'outil donc, je trouve beaucoup de difficultés au niveau des l'établissement des scripts de chargement.

                • Re: Condition If et jointure sur tables
                  Kaushik Solanki

                  Salut,

                   

                  Vous pouvez simplement charger toutes les données de base de données, puis en utilisant la charge résident, vous pouvez utiliser la fonction isnum () dans QlikView pour savoir si les valeurs sont numériques ou non.

                   

                  quelque chose comme ci-dessous.

                   

                  Data:
                  Sql Select * from abc;

                  Data1:
                  Noconcatenate
                  Load * resident Data where isnum(Field1);

                  Drop table Data;

                   

                  Cordialement,

                  Kaushik Solanki

                    • Re: Condition If et jointure sur tables

                      J'ai toujours pas résolu ce problème,

                       

                      J'ai écrit le script suivant dans l'objectif de remplacer les valeurs lors du chargement des données:

                       

                      Cde:

                       

                      select distinct

                        t1.ORDER_NUMBER,

                        t1.ATTRIBUTE4,

                        t1.SOLD_TO_ORG_ID,

                        t1.HEADER_ID,

                        t1.ORDERED_DATE,

                        t1.ATTRIBUTE1,

                        t1.ATTRIBUTE13,

                        t1.ATTRIBUTE14

                       

                       

                      from

                      OE_ORDER_HEADERS_ALL t1;

                       

                      load

                        text(ORDER_NUMBER) as [NuméroCde],

                        if (isnum(t1.ATTRIBUTE4), PARTY_NAME, t1.ATTRIBUTE4) AS [ClientFinal],

                        //ATTRIBUTE4 as [ClientFinal],

                        SOLD_TO_ORG_ID AS [ID_CLIENT],

                        HEADER_ID,

                        year(ORDERED_DATE) as [AnnéeCréationCde],

                        month(ORDERED_DATE) as [MoisCréationCde],

                        week(ORDERED_DATE) as [SemMoisCréationCde],

                        ORDERED_DATE as [DateCréationCdeOracle],

                        Date(Date#(ATTRIBUTE1,'YYYY/MM/DD hh:mm:ss'),'YYYY/MM/DD') AS DateCdeClient,

                        Date(Date#(ATTRIBUTE13,'YYYY/MM/DD hh:mm:ss'),'YYYY/MM/DD') As DateRéceptionCde,

                        Date(Date#(ATTRIBUTE14,'YYYY/MM/DD hh:mm:ss'),'DD/MM/YYYY') As DateRéceptionFDTCdeADV;

                       

                      outer join(Cde) load

                      PARTY_ID AS [ID_CLIENT],

                      PARTY_NAME AS [Client];

                       

                      SELECT distinct

                      PARTY_ID,

                      PARTY_NAME

                      FROM hz_parties;

                       

                      Le problème est que je ne vois pas trop comment il va faire la jointure sur le champ ID_CLIENT ...

                      Ce code ne marche pas ...