JMP Query Builder를 사용하여 4 개의 테이블을 조인하는 스크립트가 있습니다. 요약 된 스크립트 예제는 다음과 같습니다. 이것은 고정 된 수의 열과 함께 작동하지만 dt1은 여러 개의 열을 가질 수 있으며 모든 열을 통합해야합니다. 나머지 3 개의 테이블에는 포함 할 특정 열이 있으며 다른 모든 열은 삭제해야합니다.
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 루프는 " 'For'액세스 또는 평가시 구문 오류가 발생합니다."
Select(
For( i = 1, i <= N Items( list1 ), i++,
Column( list1[i], "t1" ) ),
Column( list2[2], "t2" ),
),EVAL (EVAL EXPR (EXPR ()))에서 다양한 부분을 포장하려고 시도했지만 주사위는 없습니다.
생각?
다음은 비슷한 문제를 해결하기 위해 더 얇은 방법을 알아낼 수 없을 때 사용하는 무차별 강제 방법입니다. 이 코드는 단순히 실행해야하는 JSL을 정확하게 구축 한 다음 실행합니다.
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));