Select/Where 語句從列表中拉取數據你好!
不確定標題是否最好地描述了這個問題,但我覺得我快要弄清楚了。
我有一個帶有 TestID 列的 JMP 表,我想根據變數 TestID 清單從另一個資料表中選擇行。
dt = Open("Lot List2.jmp");
ID_list = Column( dt, "TestID" ) << Get values;
dt1= Open Database("Connection",
"SELECT
[TestID]
,[Device]
,[FailureMode]
FROM [Database]
where TestID IN 'ID_list'
order by [TestID] Desc","Device Summary");<BR /><BR />/* ALSO TRIED*/<BR /><BR /><BR />dt = Open("Lot List2.jmp");
ID_list = Column( dt, "TestID" ) << Get values;
dt1= Open Database("Connection",
"SELECT
[TestID]
,[Device]
,[FailureMode]
FROM [Database] m
where m.TestID like 'ID_list'
order by [TestID] Desc","Device Summary");<BR />我的問題出在我的「where」語句的某個地方,但我不確定如何將 ID 字串呼叫到這個語句。 IN語句選項不會開啟新表,而like選項會開啟空白表。我的猜測是它將 ID_list 視為在另一個表中查找的變數。
我發現了一個類似的問題,但 IN 語句對我來說也不起作用: https://community.jmp.com/t5/Discussions/how-to-extract-data-with-criteria-of-JMP-table-values/td-p/9434
任何見解都值得讚賞!
消費者與市場研究大規模客製化回复:選擇/從列表中提取語句的位置ID_list 將返回一個字符串(或數字)列表,您必須將其轉換為 SQL 查詢可以理解的字符串,然後將該字符串添加到您的查詢中。 下面是一個使用 Concat Items 和 Eval Insert 構建查詢的例子
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
ID_list = Column(dt, "name") << Get values; // list of strings?
sql_template = "SELECT [TestID], [Device], [FailureMode]
FROM [Database]
where TestID IN ('¤idlist_sql¤')
order by [TestID] Desc";
idlist_sql = Concat Items(ID_list, "','");
sql_str = Eval Insert(sql_template, "¤");
dt1 = Open Database("Connection",
sql_str
"Device Summary"
);
此演示文稿可能會提供一些額外的想法JMP 和 Oracle:幸福婚姻的提示和技巧 (2022-US-30MP-1093)
回复:選擇/從列表中提取語句的位置哦,好的,我看到你必須做的修改。 我已經使用了這個模板,但我仍然注意到出現了另一個數據表。這個符號是什麼?
回复:選擇/從列表中提取語句的位置eval 插入的默認字符是“^”。我不知道你可以提供另一個。看起來 Jarmo 正在使用¤為此。
調試:
- 使用 print 或 show 來顯示您的 SQL 語句。
- 將其複制/粘貼到可以直接在您的數據庫上執行的程序中。例如,對於 Oracle,我們使用 PL/SQL Developer、TOAD 或 SQL Developer
完成後,從 JMP 運行它。
這是一些示例代碼:
// List of numeric IDs
id_list = {111, 222, 333, 444, 555};
// Convert numbers to text
for (i = 1, i <= nitems(id_list), i++,
id_list[i] = char(id_list[i]);
);
in_list = "('" || concat items(id_list, "', '") || "')";
show(in_list);
sql_statement = evalinsert(
"SELECT * from mytable m
WHERE m.id IN
^in_list^"
);
show(sql_statement);
嘗試運行它並在日誌窗口中查找結果。