6 Replies Latest reply: Mar 20, 2014 12:05 PM by Nicole Smith RSS

    Concaténation partielle

      Bonjour à tous,


      J'ai 2 fichiers excel, possédant tous les mêmes champs.

      2013.xlsx :                    2014.xlsx

      ID     NOM                    ID     NOM

      1          a                        

      2          b                         2          bb

      3          c                         3          c

                                            4          d


      En 2014, l'ID 1 a disparu, l'ID 2 a été renommé, et l'ID 4 a été créé.

      Je souhaite monter les 2 fichiers excel suivant les règles suivantes :

      1 - le fichier 2014 est monté en premier (c'est le fichier qui évolue quotidiennement) ;

      2 - le fichier 2013 est monté ensuite (c'est une archive, il peut y en avoir plusieurs) ;

      3 - l'ID 1 de 2013 n'existe pas dans 2014, il faut le monter avec son nom ;

      4 - l'ID 2 a été renommé, comme cette ID existe déjà dans 2014 il ne faut pas traiter celui de 2013 (et donc conserver uniquement le nom de 2014) ;

      5 - l'ID 3 n'a pas évoluer, ne pas traiter (mais le conserver) ;

      6 - l'ID 4 est nouveau, il doit rester.


      La table que je souhaite obtenir est la suivante :

      ID     NOM

      1          a

      2          bb

      3          c

      4          d


      Je ne parviens pas à obtenir de bons résultats avec les jointures, l'instruction keep, ou même une concaténation. Je ne parviens pas non plus à créer une requête avec des conditions sur 2 tables différentes (utilisation de resident, qualify...). Il doit bien y avoir une astuce relativement simple, mais je ne la vois pas.


      Merci d'avance,


      QF

        • Re: Concaténation partielle
          Nicole Smith

          Data:

          LOAD ID,

              NOM

          FROM 2014.xlsx (ooxml, embedded labels, table is Sheet1);

           

          Concatenate(Data)

          LOAD ID,

              NOM

          FROM 2013.xlsx (ooxml, embedded labels, table is Sheet1)

          WHERE not exists(ID);

            • Re: Concaténation partielle

              Merci beaucoup !

               

              Je pensais que Where était réservé au SQL...

               

              À présent je souhaite aller un peu plus loin :

               

              Dans le script j'ai 3 onglets

              onglet XL13

              Directory;

              NoConcatenate

              XL13:

              LOAD ID,

                   NOM

              FROM

              Split_BDD_2013.xlsx

              (ooxml, embedded labels, table is BDD_2013);

               

              onglet XL12

              Directory;

              NoConcatenate

              XL12:

              LOAD ID,

                   NOM

              FROM

              Split_BDD_2012.xlsx

              (ooxml, embedded labels, table is BDD_2012);

               

              onglet XL

              NoConcatenate

              tout_xl:

              LOAD ID, NOM Resident XL13;

              Concatenate(tout_xl)

              LOAD ID, NOM Resident XL12 Where not Exists(ID);

               

              DROP Tables XL13, XL12;

               

              J'obtiens comme résultat

               

               

              Je ne comprends pas pourquoi.

               

              Désolé, je ne sais pas comment envoyer des fichiers

                • Re: Re: Concaténation partielle
                  Nicole Smith

                  onglet XL13

                  Directory;

                  NoConcatenate

                  tout_xl:

                  LOAD ID,

                      NOM

                  FROM

                  Split_BDD_2013.xlsx

                  (ooxml, embedded labels, table is BDD_2013);

                   

                  onglet XL12

                  Directory;

                  Concatenate(tout_xl)

                  LOAD ID,

                      NOM

                  FROM

                  Split_BDD_2012.xlsx

                  (ooxml, embedded labels, table is BDD_2012)

                  WHERE not exists(ID);

                    • Re: Concaténation partielle

                      Je vais essayer de mettre ça en œuvre mais je ne suis  pas très optimiste... Je vous tiens au courant.

                       

                      C'est bien ce que je craignais : lorsqu'il y a des jointures ça ne marche plus. Avec les fichiers excel c'était simple, mais en pratique, j'ai besoin de monter mes tables 2013 en faisant de nombreuses jointures, idem pour les tables 2012. Si je fais des concaténations directement, il les fait alors que toutes les jointures ne sont pas réalisées, et de plus il renomme mes tables. J'ai donc des tables incomplètes, renommées, et des clefs sybthétiques en pagailles.

                       

                      C'est pour ça que je souhaite monter table_2013, puis table_2012, et enfin faire

                      table_total:

                      load * resident table_2013;

                      load * resident table_2012 where not exists (ID_ACTIVITE);

                       

                      (onglet 13)

                      ODBC CONNECT TO [MS Access Database;DBQ=C:\Users\fong\Desktop\TBS\Casset_2013_type_modifié.mdb];

                       

                      //-------- Start Multiple Select Statements ------

                      effectue:

                      LOAD `ID_TACHE`,

                          `NB_HEURES`;

                      SQL SELECT `ID_TACHE`,

                          `NB_HEURES`

                      FROM Effectue;

                       

                      activité:

                      LOAD `ID_ACTIVITE`,

                          `ID_TACHE`;

                      SQL SELECT `ID_ACTIVITE`,

                          `ID_TACHE`

                      FROM Tache;

                      Join(activité)

                      LOAD `ID_ACTIVITE`,

                          LIBELLE;

                      SQL SELECT `ID_ACTIVITE`,

                          LIBELLE

                      FROM `Type activite`;

                      //-------- End Multiple Select Statements ------

                       

                      (onglet 12)

                      ODBC CONNECT TO [MS Access Database;DBQ=C:\Users\fong\Desktop\TBS\Casset_2012.mdb];

                       

                      //-------- Start Multiple Select Statements ------

                      Concatenate(effectue)

                      LOAD `ID_TACHE`,

                          `NB_HEURES`

                      Where not Exists (ID_TACHE);

                      SQL SELECT `ID_TACHE`,

                          `NB_HEURES`

                      FROM Effectue;

                       

                      activité:

                      LOAD `ID_ACTIVITE`,

                          `ID_TACHE`;

                      SQL SELECT `ID_ACTIVITE`,

                          `ID_TACHE`

                      FROM Tache;

                      Join(activité)

                      LOAD `ID_ACTIVITE`,

                          LIBELLE;

                      SQL SELECT `ID_ACTIVITE`,

                          LIBELLE

                      FROM `Type activite`;

                      //-------- End Multiple Select Statements ------

                       

                      Résultat :

                      • Re: Concaténation partielle

                        Je vais essayer de faire d'abord la concaténation, puis la jointure.

                          • Re: Re: Concaténation partielle
                            Nicole Smith

                            The not exists isn't going to work with a resident load.  Notice that I used it directly when loading from Excel.  If you feel the need to use a resident load, the code is longer:

                            onglet XL13

                            Directory;

                            NoConcatenate

                            XL13:

                            LOAD ID,

                                 NOM

                            FROM

                            Split_BDD_2013.xlsx

                            (ooxml, embedded labels, table is BDD_2013);

                             

                            onglet XL12

                            Directory;

                            NoConcatenate

                            XL12:

                            LOAD ID as ID2,

                                 NOM

                            FROM

                            Split_BDD_2012.xlsx

                            (ooxml, embedded labels, table is BDD_2012);

                             

                            onglet XL

                            NoConcatenate

                            tout_xl:

                            LOAD ID, NOM Resident XL13;

                            Concatenate(tout_xl)

                            LOAD ID2 as ID, NOM Resident XL12 Where not Exists(ID,ID2);

                             

                            DROP Tables XL13, XL12;