JMP-where-clause를 데이터 필터에서 SQL-where-clause로 변환하는 방법커뮤니티 여러분,
데이터 필터 개체를 사용하여 사용자가 SQL을 통해 Oracle 데이터베이스에서 쿼리할 일부 데이터를 필터링할 수 있도록 하고 싶습니다.
그래서 데이터에서 작은 부분을 JMP 테이블로 추출했는데,
그 위에 데이터 필터를 놓습니다.
데이터 필터에서 where 절을 추출할 수 있습니다.
다음과 같이 보일 수 있습니다.
Select Where(
(:PC == "A_PROCESS" | :PC == "C_PROCESS" | :PC == "D_PROCESS") & :TC == "01"
& (:POS >= 25 & :POS <= 126)
)
이것을 다음과 같은 SQL Where-Clause로 전송하고 싶습니다.
where
PC in ("A_PROCESS", "C_PROCESS", "D_PROCESS")
and TC == "01"
and POS between 25 and 126
제가 텍스트 처리에 익숙하지 않아서,
JMP에서 이 작업을 수행하는 쉬운 방법이 있습니까?
특히 JMP-where-clause를 분해하는 방법(연결된 And만 사용하는 것보다 더 복잡할 수 있음),
SQL-where-clause에서 다시 어셈블하려면?
힌트를 주셔서 감사합니다.
게오르크
Re: JMP-where-clause를 데이터 필터에서 SQL-where-clause로 변환하는 방법이봐, 게오르그
"하지만 일종의 테이블 필터(조인 단계에서 쿼리 중지 및 저장)가 불가능했습니다."라는 문장을 따르는지 잘 모르겠습니다.
필터에서 AND는 암시적입니다.그것이 얼마나 혼란스러운지 알 수 있습니다.그러나 OR 버튼을 클릭하지 않고 여러 필터를 추가하면 AND가 됩니다.이 쿼리에서 예를 들면 다음과 같습니다.
나는 끌었다 평가 ~로부터 사용 가능한 열 목록에 필터 목록을 선택한 다음 드래그했습니다. 데이즈아웃 , 그런 다음 드래그했습니다. 상태 .나는 클릭하지 않았다 또는 단추.따라서 이 세 필터는 함께 AND'됩니다. 즉, 해당 필터는 (등급 = 'PG' AND DaysOut >= 5 AND State = 'FL') .따라서 하나의 AND' 필터 그룹이 있거나 함께 OR된 여러 개의 단일 필터가 있거나 서로 OR된 AND' 필터 그룹이 있을 수 있습니다.당신이 가질 수 없는 유일한 생각은 함께 OR된 다른 필터 그룹과 AND된 함께 OR된 필터 그룹입니다.
궁극적으로 Query Builder로 필요한 모든 것을 얻을 수 없다면 원하는 만큼 얻을 수 있으며 왼쪽 상단의 빨간색 삼각형 메뉴를 사용하여 사용자 지정 SQL 쿼리로 변환 .이렇게 하면 대화식으로 쿼리를 작성하고 텍스트 편집기에 넣을 때 쿼리에 대한 SQL이 생성되므로 필요한 것을 얻기 위해 직접 편집할 수 있습니다.

변경사항을 적용하면 사용자 정의 SQL 모드에서는 실제로 대화형 모드로 돌아갈 수 없습니다.
HTH,
에릭
Re: JMP-where-clause를 데이터 필터에서 SQL-where-clause로 변환하는 방법안녕 에릭,
빠른 답변 감사합니다 도움이 되었습니다
Query Builder에는 몇 가지 매우 멋진 기능이 있습니다. 그래서 나는 어디에서 사용할 것인지 볼 것입니다.
정의된 조인을 사용하여 쿼리를 저장할 수 있습니다.
다시 사용하십시오.
그러나 테이블의 일종의 필터(조인 단계에서 Query 중지 및 저장)가 불가능했으며,
OR 대신 AND로 필터를 연결할 가능성을 찾지 못했습니다.
친애하는,
게오르크
Re: JMP-where-clause를 데이터 필터에서 SQL-where-clause로 변환하는 방법이봐, 게오르그
좋은 질문입니다.내가 하는 일은 다음과 같습니다.
- Query Builder를 시작하고 데이터베이스에 연결합니다.
- 사용 쿼리할 테이블 선택 자주 사용할 것으로 예상되는 테이블 및 조인 관계를 추가하는 대화 상자.
- 딸깍 하는 소리 쿼리 작성 .
- 때 쿼리 빌더 창이 나타나면 쿼리에 열이나 필터를 추가하지 마십시오.대신, 즉시 클릭 구하다 쿼리에 다음과 같은 이름을 지정하십시오. complex_query_template.jmpquery.
- 해당 템플릿을 시작점으로 사용하여 쿼리를 작성하려면 complex_query_template.jmpquery 에서 집 창문 최근 파일 목록에서 마우스 오른쪽 버튼으로 클릭하고 선택합니다. 복사본 편집 .이렇게 하면 템플릿이 정의된 대로 모든 테이블과 조인이 포함된 쿼리 빌더가 실행된 다음 계속해서 열을 선택하고 필터를 추가할 수 있습니다.
템플릿 쿼리가 홈 창 최근 파일 목록에 없으면 다음을 사용할 수 있습니다. 파일 열기 열 수 있지만 즉시 수행해야 한다는 것을 기억해야 합니다. 다른 이름으로 저장 쿼리에 항목을 추가하고 저장한 후에 템플릿을 덮어쓰지 않도록 합니다.
HTH,
에릭
Re: JMP-where-clause를 데이터 필터에서 SQL-where-clause로 변환하는 방법안녕 에릭,
귀하의 의견은 저를 또 다른 질문으로 인도합니다.
스키마와 테이블이 많은 매우 복잡한 데이터베이스가 있기 때문에
JMP Query Builder에서 사용자 정의로 시작할 수 있습니까?
즉, 미리 정의된 구성표와 필터링된 테이블을 사용하여 쿼리 빌더를 시작할 수 있습니까?
데이터베이스를 클릭하는 데 몇 분이 필요하지 않습니까?
친애하는,
게오르크
Re: JMP-where-clause를 데이터 필터에서 SQL-where-clause로 변환하는 방법안녕 에릭,
귀하의 답변에 감사드립니다. 예, Query Builder를 살펴 보았습니다.
여러 스크립트 등에서 Query Builder를 사용하지만 항상 대화 상자를 사용하지 않고 사용자 지정 SQL 메서드만 사용합니다.
여기에는 두 가지 이유가 있습니다.
- 우리의 데이터베이스는 다소 복잡합니다(많은 체계, 테이블 등). 그래서 올바른 테이블을 찾기 전에 많은 클릭이 필요합니다.
- 사용자 정의 SQL을 사용하는 대신 테이블을 함께 클릭했을 때 데이터 테이블의 문서/저장된 쿼리가 보기 흉해 보입니다.
그래서 다시 사용할 수 없습니다 ...
그래서 저는 "새 SQL 쿼리" + 사용자 정의 SQL로 작업하는 것을 좋아합니다. 특히 그런 방식으로 생성된 테이블을 사용하기 위해(예: 데이터베이스에서 업데이트하고 동일한 분석을 다시 수행합니다...).
내 목표는 매우 복잡한 데이터를 쿼리하기 위한 사용자 인터페이스를 구축하는 것입니다.
첫 번째 부분은 데이터베이스에서 수행됩니다(jmp를 사용하는 클라이언트는 성능 때문에 수행할 수 없음).
두 번째 부분은 사용하기 쉬운 사용자 지정 GUI를 통해 데이터베이스에서 데이터를 가져오는 것으로 시작하는 jmp에 의해 수행됩니다.
여기에서 JMP는 완벽한 도구를 제공하지만 때로는 where 절과 같이 해결해야 할 작은 문제가 남아 있습니다.
친애하는,
게오르크
Re: JMP-where-clause를 데이터 필터에서 SQL-where-clause로 변환하는 방법이봐, 게오르그
JMP에서 쿼리 빌더를 본 적이 있습니까?파일 > 데이터베이스 > 쿼리 작성기.이를 통해 ODBC 데이터 원본에 대해 대화형으로 쿼리를 작성할 수 있습니다. 여기에는 필터링, 메시지를 표시하는 포함된 필터가 포함되며 쿼리를 대화형으로 실행하거나 JSL에서 사용할 수 있습니다.대부분의 사람들이 자신의 SQL을 직접 작성하는 것보다 훨씬 시간이 적게 걸립니다(그러나 Query Builder와 함께 사용하기 위해 자신의 SQL을 작성하려는 경우에는 옵션이기도 합니다).
감사해요,
에릭
Re: JMP-where-clause를 데이터 필터에서 SQL-where-clause로 변환하는 방법여러분 모두에게,
그동안 나는 문제를 해결했다. 내 스크립트가 JMP-where 절을 이해하는 것이 아니라 단순히 작동하는 SQL-where 절로 변환해야 한다는 것을 깨달았습니다.
따라서 이를 수행하기 위한 예제 JSL이 있습니다.
// Example for translating a JMP-where-clause from e.g. Data Filter to a SQL-where-clause
JMP_where_clause =
"Select Where(
(:PC == \!"A_PROCESS\!" | :PC == \!"C_PROCESS\!" | :PC == \!"D_PROCESS\!") & :TC == \!"01\!"
& (:POS >= 25 & :POS <= 126)
)";
jmp2sql_where = Function( {jmp_where},
// remove "Select Where()" from the string
df_list = Regex Match( jmp_where, "Select Where\((.*)\)" );
// replace JMP keywords by SQL keywords
sql_where = "AND " || Substitute( df_list[2], "\!"", "'", "==", "=", ":", "CZIM.", "&", "AND", "|", "OR" );
Return( sql_where );
);
sql_where = jmp2sql_where( JMP_where_clause);
show(sql_where);<BR /><BR />결과는 다음과 같습니다.
sql_where = "AND
(CZIM.PC = 'A_PROCESS' OR CZIM.PC = 'C_PROCESS' OR CZIM.PC = 'D_PROCESS') AND CZIM.TC = '01'
AND (CZIM.POS >= 25 AND CZIM.POS <= 126)
";
친애하는,
게오르크