Ho uno script che unisce quattro tabelle usando JMP Query Builder. Di seguito è riportato un esempio condensato dello script. Funziona con un numero fisso di colonne, tuttavia dt1 può avere un numero qualsiasi di colonne e devo incorporarle tutte. Le restanti tre tabelle hanno colonne specifiche per l'inclusione, tutte le altre colonne devono essere eliminate.
Names Default to Here( 1 );
dt1 = Open( "C:\...\dt1.jmp", invisible );
dt2 = Open( "C:\...\dt2.jmp", invisible );
name1 = dt1 << Get Name;
name2 = dt2 << Get Name;
list1 = dt1 << Get Column Names( String );
list2 = dt2 << Get Column Names( String );
New SQL Query(
Query name( "dt3" ),
Connection( "JMP" ),
Select(
Column( list1[1], "t1" ),
Column( list1[2], "t1" ),
Column( list1[3], "t1" ),
Column( list2[2], "t2" ),
),
From(
Table( name1, Alias( "t1" ) ),
Table( name2, Alias( "t2" ),
Join(
Type( Inner ),
GE(
Column( list1[1], "t1" ), Column( list2[1], "t2" )
)
)
)
)
) << Run;
I cicli FOR generano "Errore di sintassi nell'accesso o nella valutazione di 'For'".
Select(
For( i = 1, i <= N Items( list1 ), i++,
Column( list1[i], "t1" ) ),
Column( list2[2], "t2" ),
),Ho provato a avvolgere varie parti in EVAL (EVAL EXPR (EXPR ())), ma nessun dado.
Pensieri?
Ecco il metodo della forza bruta che uso, quando non riesco a capire un metodo slicker per risolvere problemi simili. Il codice crea semplicemente esattamente la JSL che deve eseguire e quindi la esegue
Names Default to Here( 1 );
dt1 = Open( "C:\...\dt1.jmp", invisible );
dt2 = Open( "C:\...\dt2.jmp", invisible );
name1 = dt1 << Get Name;
name2 = dt2 << Get Name;
list1 = dt1 << Get Column Names( String );
list2 = dt2 << Get Column Names( String );
theExpr = "
New SQL Query(
Query name( \!"dt3\!" ),
Connection( \!"JMP\!" ),
Select("
For( i = 1, i <= N Items( list1 ), i++,
theExpr = theExpr || "Column(" || list1[i] || ", \!"t1\!" ),";
);
theExpr = theExpr || "Column( list2[2], \!"t2\!" )
),
From(
Table( name1, Alias( \!"t1\!" ) ),
Table( name2, Alias( \!"t2\!" ),
Join(
Type( Inner ),
GE(
Column( " || list1[1] || ", \!"t1\!" ), Column( " || list2[1] || ", \!"t2\!" )
)
)
)
)
) << Run;";
eval(parse(theExpr));