Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

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;

1 Solution

Accepted Solutions
Not applicable
Author

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;

View solution in original post

12 Replies
Not applicable
Author

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;

alexandros17
Partner - Champion III
Partner - Champion III

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

Not applicable
Author

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;

Not applicable
Author

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;

alexandros17
Partner - Champion III
Partner - Champion III

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

Not applicable
Author

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

alexandros17
Partner - Champion III
Partner - Champion III

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ò ...

Not applicable
Author

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

grazie

simone

alexandros17
Partner - Champion III
Partner - Champion III

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.