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);
尝试运行它并在日志窗口中查找结果。