如何将 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)
)
我想将其转移到 SQLWhere 子句中,例如:
where
PC in ("A_PROCESS", "C_PROCESS", "D_PROCESS")
and TC == "01"
and POS between 25 and 126
由于我对文本处理不太熟悉,
有没有一种简单的方法可以在 JMP 中执行此操作,
特别是如何反汇编 JMP-where-子句(这可能比仅连接 And 更复杂),
并在 SQL-where-子句中重新组装它?
感谢您的任何提示,最诚挚的问候,
格奥尔格
回复:如何将 JMP-where-clause 从数据过滤器转换为 SQL-where-clause嘿,乔治,
我不确定我是否遵循这个说法:“但是一种表过滤器(在连接步骤停止并保存查询)是不可能的。”
在过滤器上,AND 是隐式的。我可以看出这是多么令人困惑。但是,如果您只是添加一堆过滤器而不单击“OR”按钮,则会得到“AND”。在此查询中,例如:
我拖着评分来自可用列列表进入过滤器列表,然后我拖动外出日,然后我拖动状态。我从来没有点击过或者按钮。所以这三个过滤器是 AND 在一起的 - 该过滤器是(评级 = 'PG' 且 DaysOut >= 5 且州 = 'FL') 。因此,您可以拥有一组“与”过滤器,或者可以拥有多个“或”在一起的单个过滤器,或者可以拥有多组“与”过滤器,这些过滤器彼此之间“或”。您唯一不能想到的是一组进行“或”运算的过滤器,与另一组进行“或”运算的过滤器进行“与”运算。
最后,如果您无法使用查询生成器完全获得所需的信息,您可以尽可能地获得所需信息,然后使用左上角的红色小三角菜单并选择转换为自定义 SQL 查询。当您以交互方式构建查询时,这将生成查询的 SQL,并将其放入文本编辑器中,以便您可以手动编辑它以获得所需的内容:

一旦你做出改变自定义SQL模式,你不能真正回到交互模式。
哈特哈,
埃里克
回复:如何将 JMP-where-clause 从数据过滤器转换为 SQL-where-clause嘿埃里克,
感谢您的快速回复,这很有帮助,
查询生成器有一些非常好的功能。 所以我会看看在哪里使用。
我可以使用定义的连接保存查询,
并再次使用它。
但是一种表过滤器(在连接步骤停止并保存查询)是不可能的,
我发现不可能用 AND 而不是 OR 连接过滤器。
此致,
格奥尔格
回复:如何将 JMP-where-clause 从数据过滤器转换为 SQL-where-clause嘿,乔治,
很好的问题。这是我所做的:
- 启动查询生成器并连接到数据库。
- 使用选择表进行查询对话框来添加您希望经常使用的任何表和连接关系。
- 点击构建查询。
- 当。。。的时候查询生成器出现窗口时,不要向查询添加任何列或过滤器。相反,请立即单击节省并为查询指定一个名称,例如复杂查询模板.jmpquery。
- 当您想要使用该模板作为起点构建查询时,请查找复杂查询模板.jmpquery在里面家窗户最近的文件列表,右键单击它并选择编辑副本。这将启动查询生成器,其中所有表和联接均按照模板定义就位,然后您可以继续选择列并添加过滤器。
如果您的模板查询不在主窗口最近的文件列表中,您可以使用文件打开打开它,但您只需要记住立即执行另存为这样,在向查询添加内容并保存后,就不会覆盖模板。
哈特哈,
埃里克
回复:如何将 JMP-where-clause 从数据过滤器转换为 SQL-where-clause嘿埃里克,
你的评论让我想到了另一个问题,
因为我们有非常复杂的数据库,有很多方案和表格,
JMP 查询生成器是否允许用户定义启动它?
即我可以使用预定义的方案和过滤表启动查询构建器吗?
这样我就不需要几分钟来点击数据库了?
此致,
格奥尔格
回复:如何将 JMP-where-clause 从数据过滤器转换为 SQL-where-clause嘿埃里克,
感谢您的回答,是的,我查看了查询生成器。
我在多个脚本等中使用查询生成器,但我总是不使用对话框,而只使用自定义 sql 方法。
这有两个原因:
- 我们的数据库相当复杂(许多方案、表格等),因此需要多次点击才能找到正确的表格
- 当您一起单击表而不是使用自定义 sql 时,数据表中的文档/保存的查询看起来相当难看,
所以不能再次使用...
所以我喜欢使用“新的 SQL 查询”+自定义 SQL,特别是通过这种方式使用生成的表(例如从数据库更新并再次进行相同的分析......)。
我的目标是构建一个用于查询非常复杂的数据的用户界面,
第一部分是在数据库中完成的(由于性能原因,使用 jmp 的客户端无法完成),
第二部分由 jmp 完成,首先通过易于使用的自定义 GUI 从数据库获取数据。
这里 JMP 提供了完美的工具,但有时仍然存在一个小问题需要解决,例如 where 子句。
此致,
格奥尔格
回复:如何将 JMP-where-clause 从数据过滤器转换为 SQL-where-clause嘿,乔治,
您是否看过 JMP 中的查询生成器?文件 > 数据库 > 查询生成器。它允许您针对 ODBC 数据源交互式地构建查询,包括过滤、包含提示的过滤器,然后您可以交互式地运行查询或在 JSL 中使用它们。对于大多数人来说,这比手动编写自己的 SQL 省时得多(但如果您想编写自己的 SQL 来与查询生成器一起使用,这也是一种选择)。
谢谢,
埃里克
回复:如何将 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)
";
此致,
格奥尔格