Select/Where文でリストから値を取得するこんにちは!
タイトルがこの問題を最もよく表しているかどうかはわかりませんが、私はこの問題を理解し始めているように感じます。
列 TestID を持つ JMP テーブルが 1 つあり、変数 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
どのようなご意見でも歓迎します!
消費者および市場調査マスカスタマイゼーションRe: Select/Where ステートメントがリストからプルされる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 とオラクル: 幸せな結婚のためのヒントとコツ (2022-US-30MP-1093)
Re: Select/Where ステートメントがリストからプルされるオーケー、私はあなたがしなければならない変更を見ました。 このテンプレートを使用しましたが、別のデータ テーブルが表示されることにまだ気づいていません。この記号 ¤ は何ですか?
Re: Select/Where ステートメントがリストからプルされるeval 挿入のデフォルト文字は「^」です。別のものを提供できるとは知りませんでした。ジャルモが使ってるみたい¤ そのために。
デバッグするには:
- 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);
これを実行してみて、ログ ウィンドウで結果を探してください。