So übersetzen Sie die JMP-Where-Klausel vom Datenfilter in die SQL-Where-KlauselLiebe Community,
Ich möchte das Datenfilterobjekt verwenden, damit Benutzer einige Daten filtern können, die über SQL aus der Oracle-Datenbank abgefragt werden sollen.
Also habe ich einen kleinen Teil der Daten in eine JMP-Tabelle extrahiert.
und einen Datenfilter darüber legen.
Aus dem Datenfilter kann ich die where-Klausel extrahieren,
es könnte wie folgt aussehen:
Select Where(
(:PC == "A_PROCESS" | :PC == "C_PROCESS" | :PC == "D_PROCESS") & :TC == "01"
& (:POS >= 25 & :POS <= 126)
)
und ich möchte dies in eine SQL-Where-Klausel übertragen wie:
where
PC in ("A_PROCESS", "C_PROCESS", "D_PROCESS")
and TC == "01"
and POS between 25 and 126
Da ich mich mit Textverarbeitung nicht so gut auskenne,
Gibt es eine einfache Möglichkeit, dies in JMP zu tun?
insbesondere wie man die JMP-Where-Klausel zerlegt (die möglicherweise komplexer ist als nur verkettete Unds),
und es in einer SQL-Where-Klausel wieder zusammenzusetzen?
Vielen Dank für jeden Hinweis, beste Grüße,
Georg
Betreff: So übersetzen Sie die JMP-Where-Klausel vom Datenfilter in die SQL-Where-KlauselHallo, Georg,
Ich bin mir nicht sicher, ob ich dieser Aussage folge: „Aber eine Art Tabellenfilter (Anhalten und Speichern der Abfrage beim Beitrittsschritt) war nicht möglich.“
Bei den Filtern ist AND implizit.Ich kann sehen, wie verwirrend das ist.Wenn Sie jedoch einfach eine Reihe von Filtern hinzufügen, ohne auf die ODER-Schaltfläche zu klicken, erhalten Sie UND.In dieser Abfrage zum Beispiel:
Ich habe geschleppt Bewertung von dem Verfügbare Spalten Liste rüber in die Filter Liste, und dann habe ich gezogen DaysOut , und dann habe ich gezogen Zustand .Ich habe nie darauf geklickt ODER Taste.Diese drei Filter sind also UND-verknüpft – dieser Filter ist es (Bewertung = „PG“ UND DaysOut >= 5 UND Bundesstaat = „FL“) .Sie können also eine einzelne Gruppe von UND-verknüpften Filtern haben, oder Sie können mehrere einzelne Filter haben, die miteinander ODER-verknüpft sind, oder Sie können Gruppen von UND-verknüpften Filtern haben, die miteinander ODER-verknüpft sind.Der einzige Gedanke, den Sie nicht haben können, ist eine Gruppe von Filtern, die mit einer ODER-Verknüpfung verknüpft sind, die mit einer anderen Gruppe von Filtern, die mit einer ODER-Verknüpfung verknüpft sind, UND-verknüpft ist.
Wenn Sie mit dem Abfrage-Generator letztendlich nicht zu dem gelangen, was Sie benötigen, können Sie so weit kommen, wie Sie möchten, und dann das Menü mit dem roten Dreieck oben links verwenden und auswählen Konvertieren Sie in eine benutzerdefinierte SQL-Abfrage .Dadurch wird die SQL für die Abfrage generiert, während Sie sie interaktiv erstellt haben, und sie in einen Texteditor einfügen, sodass Sie sie manuell bearbeiten können, um das zu erhalten, was Sie benötigen:

Sobald Sie Änderungen vorgenommen haben Benutzerdefiniertes SQL Modus können Sie nicht wirklich in den interaktiven Modus zurückkehren.
HTH,
Erik
Betreff: So übersetzen Sie die JMP-Where-Klausel vom Datenfilter in die SQL-Where-KlauselHallo Eric,
Danke für die schnelle Antwort, es hat geholfen,
und Query Builder hat einige sehr nette Funktionen. Also werde ich schauen, wo ich es verwenden soll.
Ich könnte die Abfrage mit definierten Joins speichern,
und wieder verwenden.
Aber eine Art Filter von Tabellen (Anhalten und Speichern der Abfrage beim Beitrittsschritt) war nicht möglich,
und ich habe keine Möglichkeit gefunden, Filter mit UND statt mit ODER zu verbinden.
Mit freundlichen Grüßen,
Georg
Betreff: So übersetzen Sie die JMP-Where-Klausel vom Datenfilter in die SQL-Where-KlauselHallo, Georg,
Tolle Frage.Folgendes mache ich:
- Starten Sie Query Builder und stellen Sie eine Verbindung zur Datenbank her.
- Benutzen Sie die Wählen Sie Tabellen für die Abfrage aus Im Dialogfeld können Sie alle Tabellen und Join-Beziehungen hinzufügen, die Sie voraussichtlich häufig verwenden.
- Klicken Abfrage erstellen .
- Wenn das Abfrage Ersteller Wenn das Fenster angezeigt wird, fügen Sie der Abfrage keine Spalten oder Filter hinzu.Klicken Sie stattdessen sofort Speichern und geben Sie der Abfrage einen Namen wie complex_query_template.jmpquery.
- Wenn Sie eine Abfrage mit dieser Vorlage als Ausgangspunkt erstellen möchten, suchen Sie nach complex_query_template.jmpquery im Heim Fenster Aktuelle Dateien Klicken Sie mit der rechten Maustaste darauf und wählen Sie die Liste aus Bearbeiten Sie eine Kopie .Dadurch wird Query Builder mit allen in der Vorlage definierten Tabellen und Verknüpfungen gestartet. Anschließend können Sie mit der Auswahl von Spalten und dem Hinzufügen von Filtern fortfahren.
Wenn sich Ihre Vorlagenabfrage nicht in der Liste „Zuletzt verwendete Dateien“ im Home-Fenster befindet, können Sie sie verwenden Datei öffnen um es zu öffnen, aber Sie müssen nur daran denken, sofort ein zu tun Speichern als Damit Sie Ihre Vorlage nicht überschreiben, nachdem Sie Inhalte zur Abfrage hinzugefügt und gespeichert haben.
HTH,
Erik
Betreff: So übersetzen Sie die JMP-Where-Klausel vom Datenfilter in die SQL-Where-KlauselHallo Eric,
Ihr Kommentar bringt mich zu einer weiteren Frage:
da wir sehr komplexe Datenbanken mit vielen Schemata und Tabellen haben,
Erlaubt der JMP Query Builder, ihn benutzerdefiniert zu starten?
Dh kann ich den Abfrage-Builder mit vordefinierten Schemata und gefilterten Tabellen starten?
damit ich nicht mehrere Minuten brauche, um mich durch die Datenbank zu klicken?
Mit freundlichen Grüßen,
Georg
Betreff: So übersetzen Sie die JMP-Where-Klausel vom Datenfilter in die SQL-Where-KlauselHallo Eric,
Vielen Dank für Ihre Antwort. Ja, ich habe mir den Query Builder angesehen.
Ich verwende den Query Builder in mehreren Skripten usw., verwende jedoch immer nicht den Dialog, sondern nur die benutzerdefinierte SQL-Methode.
Dies hat zwei Gründe:
- Unsere Datenbanken sind ziemlich komplex (viele Schemata, Tabellen usw.), daher muss man lange klicken, bevor jemand die richtige Tabelle findet
- Die Dokumentation/gespeicherten Abfragen in der Datentabelle sehen ziemlich hässlich aus, wenn Sie die Tabelle zusammengeklickt haben, anstatt benutzerdefiniertes SQL zu verwenden.
daher kann es nicht wieder verwendet werden ...
Daher arbeite ich gerne mit „Neuer SQL-Abfrage“ + benutzerdefiniertem SQL, insbesondere um die auf diese Weise generierten Tabellen zu verwenden (z. B. Aktualisierung aus der Datenbank und erneute Durchführung derselben Analyse ...).
Mein Ziel ist es, eine Benutzeroberfläche für die Abfrage sehr komplexer Daten zu erstellen.
Der erste Teil wird in der Datenbank ausgeführt (Client mit JMP ist aus Leistungsgründen nicht möglich).
und der zweite Teil wird von jmp erledigt, beginnend mit dem Abrufen der Daten aus der Datenbank über eine benutzerfreundliche, angepasste GUI.
Hier bietet JMP perfekte Tools, aber manchmal bleibt noch ein kleines Problem zu lösen, wie zum Beispiel bei der Where-Klausel.
Mit freundlichen Grüßen,
Georg
Betreff: So übersetzen Sie die JMP-Where-Klausel vom Datenfilter in die SQL-Where-KlauselHallo, Georg,
Haben Sie sich überhaupt den Query Builder in JMP angesehen?Datei > Datenbank > Abfrage-Generator.Es ermöglicht Ihnen, Abfragen interaktiv für ODBC-Datenquellen zu erstellen, einschließlich Filterung, integrierte Filter zur Eingabeaufforderung, und dann können Sie die Abfragen entweder interaktiv ausführen oder sie in JSL verwenden.Für die meisten Leute ist es viel weniger zeitaufwändig, als Ihre eigene SQL von Hand zu schreiben (wenn Sie aber Ihre eigene SQL schreiben möchten, um sie mit Query Builder zu verwenden, ist das auch eine Option).
Danke,
Erik
Betreff: So übersetzen Sie die JMP-Where-Klausel vom Datenfilter in die SQL-Where-KlauselVerehrte Gäste,
Mittlerweile habe ich das Problem gelöst. Mir wurde klar, dass mein Skript die JMP-Where-Klausel nicht verstehen muss, sondern sie einfach in eine funktionierende SQL-Where-Klausel übersetzen sollte.
Hier ist ein JSL-Beispiel dafür.
// 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 />Und das Ergebnis ist:
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)
";
Mit freundlichen Grüßen,
Georg