12 Replies Latest reply: Feb 27, 2014 4:35 AM by simone vaccaro RSS

    QV Load inner join scripting

      Hi all,

      is it possibile a inner join beetween 3 load tables?

      if i run script below pasted i have a error for table not exist :

       

      Table not found

      Inner Join(STORICOREPORT)

       

      How can i resolve this problem?

      tyvm

       

      Simon

       

       

       

      FOR i = Num(Date#('01/12/2012','DD/MM/YYYY')) to Num(Date#('31/12/2012','DD/MM/YYYY'))

       

       

        

           STORICOEDIZIONI:

           LOAD [ID] AS EDITIONID,[GENERATED_CODE] AS CODICEEDIZIONE where Num(START_DATE) >= Num(Date#('01/01/2012','DD/MM/YYYY')) and Num(EXPIRY_DATE) <= $(i);

           SELECT * from EDITION;

        

           inner join(STORICOEDIZIONI)

           STORICOREPORT:

           LOAD [EDITION_ID] AS EDITIONID,[ID] AS PRESENCEREPID;

            SELECT * FROM PRESENCE_REPORT;

         

            Inner Join(STORICOREPORT)

           STORICOPRESENZE:

           LOAD [PRESENCE_REPORT_ID]AS PRESENCEREPID,[EMPLOYEE_ID]AS PRESEMPID,[TOT_IN_HOURS] AS INHOURS,[TOT_EXTRA_HOURS] AS EXTRAHOURS,[MAN_DAYS] AS GGUOMO WHERE COMPLETED = '1';

           SELECT * FROM PRESENCE_EMPLOYEE;

       

      NEXT;

        • Re: QV Load inner join scripting

          hi simone put this in your script only give first table name

          because   2 table will get joined with 1st hense you have to give 1st table name in join as bellow


          Inner Join(STORICOEDIZIONI)

               STORICOPRESENZE:

               LOAD [PRESENCE_REPORT_ID]AS PRESENCEREPID,[EMPLOYEE_ID]AS PRESEMPID,[TOT_IN_HOURS] AS INHOURS,[TOT_EXTRA_HOURS] AS EXTRAHOURS,[MAN_DAYS] AS GGUOMO WHERE COMPLETED = '1';

               SELECT * FROM PRESENCE_EMPLOYEE;

           

          NEXT;

          • Re: QV Load inner join scripting
            Alessandro Saccone

            Quando fai una inner  o left join,

            l'alias STORICOREPORT, STORICOPRESENZE ecc. non viene preso in considerazione poichè quella tabella non esiste in quanto accorpata con join alla precedente, per cui dovresti fare nel secondo join :

             

            inner join(STORICOEDIZIONI)

            STORICOPRESENZE:


            anche se come dicevo il nome STORICOPRESENZE: non è necessario

              • Re: Re: QV Load inner join scripting

                Ciao Alessandro,

                 

                sto tentando di fare un ulteriore passaggio.

                In pratica ddovrei aggiungere una colonna "GIORNO" col valore della variabile $(i) del ciclo, ho provato ad aggiungerle in questo modo con una tbella "temporanea" alla fine per la selezione.

                Sembra funzionare ma per ogni valore di i dopo il primo i dati numericidella STORICOPRESENZE vanno tutti a zero.

                In pratica dovrei costruire una tabella che comprenda una colonna giorno e alcuni campi presi dai vari LOAD. E' possibile?

                Grazie


                 

                 

                FOR i = Num(Date#('30/12/2012','DD/MM/YYYY')) to Num(Date#('31/12/2012','DD/MM/YYYY'))

                 

                    STORICOUO:

                    LOAD  $(i) as GIORNO,[EMPLOYEE_ID]AS EMPID,[COD_UO]AS CODUO,[DESC_UO] AS DESCRUO,[START_DATE]AS DATAINIZIOUO,[EXPIRY_DATE] AS DATAFINEUO where Num(START_DATE) <= $(i) and Num(EXPIRY_DATE) >= $(i) and CODAZIENDA = 100;

                 

                    SELECT * from employee_uo;

                 

                    STORICOEDIZIONI:

                    LOAD $(i) as GIORNO,[ID] AS EDITIONID,[GENERATED_CODE] AS CODICEEDIZIONE where Num(START_DATE) >= Num(Date#('01/01/2012','DD/MM/YYYY')) and Num(EXPIRY_DATE) <= $(i);

                    //LOAD $(i) as GIORNO,[ID] AS EDITIONID,[GENERATED_CODE] AS CODICEEDIZIONE where Num(START_DATE) >= Num(Date#('01/01/'&Year($(i)),'DD/MM/YYYY')) and Num(EXPIRY_DATE) <= $(i);

                    SELECT * from EDITION;

                 

                    Inner join(STORICOEDIZIONI)

                    STORICOREPORT:

                    LOAD [EDITION_ID] AS EDITIONID,[ID] AS PRESENCEREPID;

                      SELECT * FROM PRESENCE_REPORT;

                   

                   

                      Inner Join(STORICOEDIZIONI)

                    STORICOPRESENZE:

                    LOAD  [PRESENCE_REPORT_ID]AS PRESENCEREPID,[EMPLOYEE_ID]AS EMPID,Num([TOT_IN_HOURS]) AS INHOURS,if(Num([TOT_EXTRA_HOURS])<>null(),Num([TOT_EXTRA_HOURS]),0)AS EXTRAHOURS,[MAN_DAYS] AS GGUOMO WHERE COMPLETED = '1';

                    SELECT * FROM PRESENCE_EMPLOYEE;

                 

                 

                    temporanea:

                    LOAD $(i) as GIORNO AutoGenerate(1) ;

                 

                NEXT;

                  • Re: Re: QV Load inner join scripting
                    Alessandro Saccone

                    Ciao Simone,

                    secondo me funziona ma la tabella temporanea non è necessaria in quanto il valore di giorno è già inserito nella Load.

                     

                    Prova ad eliminare la temporanea e fammi sapere

                     

                    Ciao

                      • Re: Re: QV Load inner join scripting

                        Effettivamente era inutile, ma rimane il problema che se ad esempio lanciodal 30-12-2012 al 31-12-2012 per il secondo giorno i valori della STORICOPRESENZE vanno tutti a null.

                        Grazie

                          • Re: Re: QV Load inner join scripting
                            Alessandro Saccone

                            Io non credo che la sola aggiunta del campo giorno (Corretta tra l'altro) dia questo errore, sospetto che il problema possa derivare dalla tabella STORICOUO che va in associazione con la STORICOEDIZIONI.

                             

                            Per analizzare il problema fai così:

                            1) elimina (temporaneamente) la tabella STORICOUO dal for e verifica che tutto funzioni (come penso)

                            2) se non dovesse funzionare verifica che senza il campo giorno tutto funzioni.

                             

                            Fammi sapere.

                             

                            P.S.

                            Purtroppo potrò risponderti domattina però ...

                            • Re: QV Load inner join scripting

                              Ho notato che la tabella "storicoedizioni" al secondo giro del ciclo diventa storicoedizioni-1 e perde i campi.

                              grazie

                               

                              simone

                                • Re: QV Load inner join scripting
                                  Alessandro Saccone

                                  La soluzione piu semplice e' la seguente:

                                   

                                  Crea fuori dal ciclo una tabella

                                   

                                  STORICOEDIZIONI:

                                  load null() as giorno, null() as EDITIONID e così via per tutti i campi delle tre tabelle in join.


                                  Nel ciclo non usare alias di tabelle ma lega tutto alla STORICOEDIZIONI così come già fai e vedrai che il gioco è fatto.

                                    • Re: QV Load inner join scripting

                                      EMPLOYEE 4.326 linee recuperate

                                      STORICOUO << employee_uo 2.633 linee recuperate

                                      STORICOUO << employee_uo 5.266 linee recuperate

                                      STORICOEDIZIONI << EDITION 761 linee recuperate

                                      PRESENCE_REPORT 6.702 linee recuperate

                                      STORICOEDIZIONI-1 << EDITION 778 linee recuperate

                                      PRESENCE_REPORT 6.702 linee recuperate

                                      $Syn 1 = GIORNO+EDITIONID+CODICEEDIZIONE

                                       

                                      Il caricamento è sempre lo stesso, quello STORICOEDIZIONI-1 perde tutti i riferimenti con le altre tabelle sotto.

                                        • Re: QV Load inner join scripting
                                          Alessandro Saccone

                                          Ciao Simone,

                                          ho risolto un problema analogo al tuo (dovuto alla join nel ciclo for) in questa maniera, spero ti sia utile:

                                           

                                          FOR idx = ...

                                           

                                            MyTableTMP$(idx):

                                            LOAD fld1 .. fldn from ...

                                            Left Join

                                            LOAD fldm ... fldz fom ...

                                          NEXT

                                           

                                           

                                          MyTable:

                                          NoConcatenate

                                          LOAD '' as fld1,  '' as fldz;

                                           

                                           

                                          FOR idx = ...

                                            MyTable:

                                            Concatenate

                                            LOAD fld1 ... Resident MyTableTMP$(idx);

                                            DROP Table MyTableTMP$(idx);

                                          NEXT

                                           

                                          Fammi sapere

                                            • Re: Re: QV Load inner join scripting

                                              Sono riuscito in questo modo(alle 2 di notte)

                                               

                                              FOR i = Num(Date#('30/06/2012','DD/MM/YYYY')) to Num(Date#('01/01/2013','DD/MM/YYYY'))

                                               

                                                  STORICOEDIZIONI:

                                                

                                                  LOAD $(i) as GIORNO,[EMPLOYEE_ID]AS EMPID,Num([TOT_IN_HOURS]) AS INHOURS,if(Num([TOT_EXTRA_HOURS])<>null(),Num([TOT_EXTRA_HOURS]),0)AS EXTRAHOURS,[MAN_DAYS] AS GGUOMO WHERE COMPLETED = '1'

                                                    AND Num(START_DATE) >= Num(Date#('01/01/'&Year($(i)),'DD/MM/YYYY')) and Num(EXPIRY_DATE) <= $(i);

                                                  SELECT * from EDITION,PRESENCE_REPORT,PRESENCE_EMPLOYEE WHERE EDITION.ID=PRESENCE_REPORT.EDITION_ID AND PRESENCE_REPORT.ID=PRESENCE_EMPLOYEE.PRESENCE_REPORT_ID;

                                                

                                               

                                                  STORICOUO:

                                                  LOAD $(i) as GIORNO,[EMPLOYEE_ID]AS EMPID,[COD_UO]AS CODUO,[DESC_UO] AS DESCRUO,[START_DATE]AS DATAINIZIOUO,[EXPIRY_DATE] AS DATAFINEUO where Num(START_DATE) <= $(i) and Num(EXPIRY_DATE) >= $(i); //and CODAZIENDA = 100;

                                                  SELECT * from employee_uo;

                                                

                                                      

                                              NEXT;

                                               

                                              Ho provato la tua soluzione e sembra essere ok, non capisco però il motivo per cui le join impostate come prima davano quella situazione, in fondo non ho fatto altro che scrivere in 3 parti la stessa query che ora ho unito, mah...

                                              Grazie mille per l'aiuto

                                              Simone

                              • Re: QV Load inner join scripting
                                Mahendra Reddy

                                Mention below scriptthen it will work


                                Inner Join(STORICOEDIZIONI)

                                     STORICOPRESENZE:

                                     LOAD [PRESENCE_REPORT_ID]AS PRESENCEREPID,[EMPLOYEE_ID]AS PRESEMPID,[TOT_IN_HOURS] AS INHOURS,[TOT_EXTRA_HOURS] AS EXTRAHOURS,[MAN_DAYS] AS GGUOMO WHERE COMPLETED = '1';

                                     SELECT * FROM PRESENCE_EMPLOYEE;