cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • JMP will suspend normal business operations for our Winter Holiday beginning on Wednesday, Dec. 24, 2025, at 5:00 p.m. ET (2:00 p.m. ET for JMP Accounts Receivable).
    Regular business hours will resume at 9:00 a.m. EST on Friday, Jan. 2, 2026.
  • We’re retiring the File Exchange at the end of this year. The JMP Marketplace is now your destination for add-ins and extensions.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Valerio
Level II

Pull Data using SQL and JMP string in JSL script

Hi all.

I am accessing a certain database using SQL from a JSL script.

To pull the data I want, I need to provide a specification.

The specification comes in the form of a list or matrix in JMP/JSL.

If I manually type-in the single items names, it works. =>

/* Fetch Single Items from Database*/
	A = Open Database("Server Specs", "SELECT * FROM CertainFolder a WHERE a.CertainColumn IN ('A','B','C','D')");

But, since the items might be thousands, I need to find a way to use a single name representing a list (or a matrix) of the items.

Of course, like this is not working. =>

/* Fetch Data from Data Table*/
	Items_M = :Items << get as matrix();

/* Fetch Data from Database*/
	A = Open Database("Server Specs", "SELECT * FROM CertainFolder a WHERE a.CertainColumn IN ('^Items_M^')");

What is the simplest way to do this?

Thank you!

2 ACCEPTED SOLUTIONS

Accepted Solutions
David_Burnham
Super User (Alumni)

Re: Pull Data using SQL and JMP string in JSL script

I can't say, what is simplest, but this is how I do it:

 

// for test purposes 
lstItems = {"A","B","C","D"};

// build a comma separated list
strItems = ConcatItems(lstItems,",");

/* Fetch Data from Database*/

eval(parse(evalinsert("\[ 

	A = Open Database("Server Specs", "SELECT * FROM CertainFolder a WHERE a.CertainColumn IN (^strItems^)")
	
]\")));;
-Dave

View solution in original post

Georg
Level VII

Re: Pull Data using SQL and JMP string in JSL script

This is how I usually do it:

  • building a unique list of column values
  • feeding that list into an sql
  • get data back from database into a new table

It is so far a I know the simplest way to perform this task, and I use it a lot,

I have implemented this in my menu, to have it at hand quickly.

// take unique values from the column :items
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize( Current Data Table(), item_lst = by( :NAME /* :item */ ) );
// show list
show(item_lst);
// prepare list for sql
item_lst_str=substitute (char(item_lst),"{","(","}",")","\!"","'");

// open SQL Query with inserted item_lst
New SQL Query(
	Connection(
		"ODBC:DSN=DSN_NAME;UID=user;DBQ=database;" // connection string to be modified
	),
	QueryName( "ITEMS_Query" ),
	CustomSQL( eval insert("SELECT * from database_table dt where dt.item in ^item_lst_str^;") )
) << modify;
// or directly run if neccessary
// ) << Run;
Georg

View solution in original post

5 REPLIES 5
David_Burnham
Super User (Alumni)

Re: Pull Data using SQL and JMP string in JSL script

I can't say, what is simplest, but this is how I do it:

 

// for test purposes 
lstItems = {"A","B","C","D"};

// build a comma separated list
strItems = ConcatItems(lstItems,",");

/* Fetch Data from Database*/

eval(parse(evalinsert("\[ 

	A = Open Database("Server Specs", "SELECT * FROM CertainFolder a WHERE a.CertainColumn IN (^strItems^)")
	
]\")));;
-Dave
Valerio
Level II

Re: Pull Data using SQL and JMP string in JSL script

Thank you very much!

 

That it what I was looking for... It wouldn't work during the weekend because I had unstable access to the database.

 

Thanks again.

Georg
Level VII

Re: Pull Data using SQL and JMP string in JSL script

This is how I usually do it:

  • building a unique list of column values
  • feeding that list into an sql
  • get data back from database into a new table

It is so far a I know the simplest way to perform this task, and I use it a lot,

I have implemented this in my menu, to have it at hand quickly.

// take unique values from the column :items
dt = open("$SAMPLE_DATA\Big Class.jmp");
summarize( Current Data Table(), item_lst = by( :NAME /* :item */ ) );
// show list
show(item_lst);
// prepare list for sql
item_lst_str=substitute (char(item_lst),"{","(","}",")","\!"","'");

// open SQL Query with inserted item_lst
New SQL Query(
	Connection(
		"ODBC:DSN=DSN_NAME;UID=user;DBQ=database;" // connection string to be modified
	),
	QueryName( "ITEMS_Query" ),
	CustomSQL( eval insert("SELECT * from database_table dt where dt.item in ^item_lst_str^;") )
) << modify;
// or directly run if neccessary
// ) << Run;
Georg
Valerio
Level II

Re: Pull Data using SQL and JMP string in JSL script

Thanks!


This works as well. And it is very useful!

 

Best,

Valerio

David_Burnham
Super User (Alumni)

Re: Pull Data using SQL and JMP string in JSL script

I changed by example to use Concat Items function which does the job of converting a list into a comma separated string. Your code used ^^ which is the smart way of doing an insert, but it only works in conjunction with the Eval Insert function.

-Dave

Recommended Articles