如何將 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)
";
此致,
格奧爾格