Ich habe ein Skript, das vier Tabellen mithilfe des JMP Query Builder verknüpft. Ein komprimiertes Beispiel des Skripts finden Sie unten. Dies funktioniert mit einer festen Anzahl von Spalten, dt1 kann jedoch eine beliebige Anzahl von Spalten haben und ich muss sie alle einbeziehen. Die verbleibenden drei Tabellen enthalten bestimmte Spalten, die einbezogen werden müssen, alle anderen Spalten müssen gelöscht werden.
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;
FOR-Schleifen führen zu „Syntaxfehler beim Zugriff oder bei der Auswertung von ‚For‘“.
Select(
For( i = 1, i <= N Items( list1 ), i++,
Column( list1[i], "t1" ) ),
Column( list2[2], "t2" ),
),Ich habe versucht, verschiedene Teile in EVAL(EVAL EXPR(EXPR())) zu verpacken, aber keine Würfel.
Gedanken?
Hier ist die Brute-Force-Methode, die ich verwende, wenn ich keine bessere Methode zur Lösung ähnlicher Probleme finden kann.Der Code erstellt einfach genau die JSL, die er zum Ausführen benötigt, und führt sie dann aus
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));