Come tradurre la clausola Where di JMP dal filtro dati alla clausola Where di SQLCara Comunità,
Mi piacerebbe utilizzare l'oggetto filtro dati per consentire agli utenti di filtrare alcuni dati da interrogare dal database Oracle tramite SQL.
Quindi ho estratto una piccola parte dai dati in una tabella JMP,
e mettici sopra un filtro dati.
Da Data Filter posso estrarre la clausola where,
potrebbe apparire come segue:
Select Where(
(:PC == "A_PROCESS" | :PC == "C_PROCESS" | :PC == "D_PROCESS") & :TC == "01"
& (:POS >= 25 & :POS <= 126)
)
e vorrei trasferire questo in una clausola Where SQL come:
where
PC in ("A_PROCESS", "C_PROCESS", "D_PROCESS")
and TC == "01"
and POS between 25 and 126
Dato che non ho molta familiarità con l'elaborazione del testo,
c'è un modo semplice per farlo in JMP,
in particolare come disassemblare la clausola JMP-where (che potrebbe essere più complessa delle sole And concatenate),
e riassemblarlo in una clausola SQL-where?
Grazie per qualsiasi suggerimento, cordiali saluti,
Giorgio
Ri: Come tradurre la clausola Where di JMP dal filtro dati alla clausola Where di SQLEhi, Giorgio,
Non sono sicuro di seguire questa affermazione: "Ma una sorta di filtro delle tabelle (arresto e salvataggio della query al passaggio di unione) non era possibile".
Sui filtri AND è implicito.Posso vedere quanto sia confuso.Ma se aggiungi solo una serie di filtri senza fare clic sul pulsante OR, ottieni AND.In questa query, ad esempio:
ho trascinato Valutazione dal Colonne disponibili elenco nel Filtri list, e poi ho trascinato DaysOut , e poi ho trascinato Stato .Non ho mai cliccato sul O pulsante.Quindi quei tre filtri sono AND insieme - quel filtro lo è (Rating = 'PG' AND DaysOut >= 5 AND State = 'FL') .Quindi, puoi avere un singolo gruppo di filtri AND, oppure puoi avere più filtri singoli che sono OR insieme, oppure puoi avere gruppi di filtri AND che sono OR l'uno con l'altro.L'unica cosa che non puoi avere è un gruppo di filtri che è OR insieme che è AND con un altro gruppo di filtri che sono OR insieme.
In definitiva, se non riesci ad arrivare fino a ciò di cui hai bisogno con Query Builder, puoi arrivare fin dove ti porterà, quindi utilizzare il menu del triangolo rosso in alto a sinistra e selezionare Converti in query SQL personalizzata .Ciò genererà l'SQL per la query mentre lo hai creato in modo interattivo e lo inserisci in un editor di testo in modo che tu possa modificarlo manualmente per ottenere ciò di cui hai bisogno:

Una volta apportate le modifiche SQL personalizzato modalità, non puoi davvero tornare alla modalità interattiva.
HTH,
Eric
Ri: Come tradurre la clausola Where di JMP dal filtro dati alla clausola Where di SQLCiao Eric,
grazie per la rapida risposta, mi ha aiutato,
e Query Builder ha alcune caratteristiche molto interessanti. Quindi cercherò, dove usare.
Potrei salvare la query con join definiti,
e usalo di nuovo.
Ma una sorta di filtro delle tabelle (arresto e salvataggio della query al passaggio di unione) non era possibile,
e non ho trovato la possibilità di collegare i filtri con AND invece di OR.
Distinti saluti,
Giorgio
Ri: Come tradurre la clausola Where di JMP dal filtro dati alla clausola Where di SQLEhi, Giorgio,
Ottima domanda.Ecco cosa faccio:
- Avvia Query Builder e connettiti al database.
- Usa il Seleziona Tabelle per query dialog per aggiungere qualsiasi tabella e unire le relazioni che prevedi di utilizzare frequentemente.
- Clic Crea query .
- Quando il Costruttore di query viene visualizzata la finestra, non aggiungere colonne o filtri alla query.Invece, fai clic immediatamente Salva e dai alla query un nome come complex_query_template.jmpquery.
- Quando vuoi creare una query utilizzando quel modello come punto di partenza, find complex_query_template.jmpquery nel Casa finestra File recenti list, fare clic destro su di esso e selezionare Modifica una copia .Questo avvierà Query Builder con tutte le tabelle e i join in posizione come il modello definito, quindi puoi procedere con la selezione delle colonne e l'aggiunta di filtri.
Se la query del modello non è nell'elenco dei file recenti della finestra Home, è possibile utilizzare File Apri per aprirlo, ma devi solo ricordarti di fare subito a Salva come in modo che dopo aver aggiunto elementi alla query e averlo salvato, non si sovrascriva il modello.
HTH,
Eric
Ri: Come tradurre la clausola Where di JMP dal filtro dati alla clausola Where di SQLCiao Eric,
il tuo commento mi porta ad un'altra domanda,
poiché abbiamo database molto complessi con molti schemi e tabelle,
JMP Query Builder consente di avviarlo definito dall'utente?
Cioè posso avviare il generatore di query con schemi predefiniti e tabelle filtrate,
in modo da non aver bisogno di diversi minuti per fare clic sul database?
Distinti saluti,
Giorgio
Ri: Come tradurre la clausola Where di JMP dal filtro dati alla clausola Where di SQLCiao Eric,
grazie per la tua risposta, sì, ho dato un'occhiata a Query Builder.
Uso il generatore di query in diversi script ecc., Ma non utilizzo sempre la finestra di dialogo, ma solo il metodo sql personalizzato.
Questo per due motivi:
- i nostri database sono piuttosto complessi (molti schemi, tabelle ecc.), quindi è necessario fare molti clic prima che chiunque possa trovare la tabella giusta
- la documentazione/le query salvate nella tabella dei dati sembrano piuttosto brutte, quando hai fatto clic sulla tabella insieme invece di utilizzare sql personalizzato,
quindi non può essere riutilizzato...
Quindi mi piace lavorare con "Nuova query SQL" + SQL personalizzato, in particolare per utilizzare le tabelle generate in questo modo (ad esempio aggiornare dal database e ripetere la stessa analisi ...).
Il mio obiettivo è costruire un'interfaccia utente per interrogare dati molto complessi,
la prima parte viene eseguita nel database (il client con jmp non può eseguire a causa delle prestazioni),
e la seconda parte viene eseguita da jmp iniziando con l'ottenimento dei dati dal database tramite una GUI personalizzata di facile utilizzo.
Qui JMP offre strumenti perfetti, ma a volte rimane un piccolo problema da risolvere, come per la clausola where.
Distinti saluti,
Giorgio
Ri: Come tradurre la clausola Where di JMP dal filtro dati alla clausola Where di SQLEhi, Giorgio,
Hai guardato Query Builder in JMP?File > Database > Generatore di query.Ti consente di creare query in modo interattivo su origini dati ODBC, inclusi filtri, filtri inclusi che richiedono, quindi puoi eseguire le query in modo interattivo o utilizzarle in JSL.È molto meno dispendioso in termini di tempo rispetto alla scrittura manuale del proprio SQL per la maggior parte delle persone (ma se si desidera scrivere il proprio SQL da utilizzare con Query Builder, anche questa è un'opzione).
Grazie,
Eric
Ri: Come tradurre la clausola Where di JMP dal filtro dati alla clausola Where di SQLCarissimi,
nel frattempo ho risolto il problema. Mi sono reso conto che il mio script non deve comprendere la clausola JMP-where, ma dovrebbe semplicemente tradurlo in una clausola SQL funzionante.
Quindi ecco un esempio JSL per farlo.
// Example for translating a JMP-where-clause from e.g. Data Filter to a SQL-where-clause
JMP_where_clause =
"Select Where(
(:PC == \!"A_PROCESS\!" | :PC == \!"C_PROCESS\!" | :PC == \!"D_PROCESS\!") & :TC == \!"01\!"
& (:POS >= 25 & :POS <= 126)
)";
jmp2sql_where = Function( {jmp_where},
// remove "Select Where()" from the string
df_list = Regex Match( jmp_where, "Select Where\((.*)\)" );
// replace JMP keywords by SQL keywords
sql_where = "AND " || Substitute( df_list[2], "\!"", "'", "==", "=", ":", "CZIM.", "&", "AND", "|", "OR" );
Return( sql_where );
);
sql_where = jmp2sql_where( JMP_where_clause);
show(sql_where);<BR /><BR />E il risultato è:
sql_where = "AND
(CZIM.PC = 'A_PROCESS' OR CZIM.PC = 'C_PROCESS' OR CZIM.PC = 'D_PROCESS') AND CZIM.TC = '01'
AND (CZIM.POS >= 25 AND CZIM.POS <= 126)
";
Distinti saluti,
Giorgio