L'instruction Select/Where extrait de la listeSalut!
Je ne suis pas sûr que le titre décrive le mieux ce problème, mais j'ai l'impression que je suis sur le point de le résoudre.
J'ai une table JMP avec une colonne TestID et je souhaite sélectionner des lignes d'une autre table de données en fonction de la liste de variables 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 />Mon problème se situe quelque part dans mon instruction « where », mais je ne sais pas comment appeler la chaîne d'identifiants dans cette instruction. L'option d'instruction IN n'ouvre pas de nouvelle table, tandis que l'option « like » ouvre une table vide. Je suppose qu'elle traite ID_list comme la variable à rechercher dans l'autre table.
J'ai trouvé une question similaire, mais l'instruction IN ne fonctionne pas non plus pour moi : https://community.jmp.com/t5/Discussions/how-to-extract-data-with-criteria-of-JMP-table-values/td-p/9434
Toute information est appréciée !
Études de marché et de consommationPersonnalisation de masseRe : Select/Where Statement Pulls from ListID_list vous renverra une liste de chaînes (ou de nombres) et vous devrez la convertir en une chaîne que la requête SQL comprendra, puis ajouter cette chaîne à votre requête. Vous trouverez ci-dessous un exemple de création de requête à l'aide de Concat Items et 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"
);
Cette présentation pourrait donner quelques idées supplémentaires JMP et Oracle : Trucs et astuces pour un mariage heureux (2022-US-30MP-1093)
Re : Sélectionner/Où l'instruction est extraite de la listeAh d'accord je vois les modifications que tu as à faire. J'ai utilisé ce modèle, mais je n'arrive toujours pas à faire apparaître une autre table de données. quel est ce symbole, ¤ ?
Re : Sélectionner/Où l'instruction est extraite de la listeLe caractère par défaut pour eval insert est "^".Je ne savais pas qu'on pouvait en fournir un autre.On dirait que Jarmo utilise ¤ pour ça.
Pour déboguer :
- Utilisez print ou show pour afficher votre instruction SQL.
- Copiez/collez-le dans un programme pouvant s'exécuter directement sur votre base de données.Par exemple pour Oracle nous utilisons PL/SQL Developer, TOAD ou SQL Developer
Une fois que cela fonctionne, exécutez-le à partir de JMP.
Voici un exemple de code :
// 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);
Essayez de l'exécuter et recherchez les résultats dans la fenêtre du journal.