SQL mit 'Name%'Hallo,
Ich habe eine SQL-Abfrage in der offenen Datenbank und suche nach etwas wie 'FAIL%'. Ich suche gerne nach einem Namen, der FAIL *** ist. Wie erreichen Sie das? Derzeit wird nur FAIL% ausgewählt.
dt3 = Open Database(
"DSN=" || one_product || ";UID=**;PWD=***;",
"select count(distinct BoardNo) from " || station || " where boardno in (select BoardNo from (select BoardNo,result,starttime from " ||
station || " where BoardNo in (select BoardNo from (select BoardNo,result,count(result) as test from " || station ||
" where result like 'FAIL%' group by BoardNo having test >1 order by starttime desc)as comm) order by BoardNo,starttime desc) as t where result like 'PASS' group by BoardNo)and date(starttime) between '"
|| dateb || "' and '" || datee || "'",
"ABC"
);
Der Name Station und Datum und Datum wurde erstellt. Danke für Ihre Hilfe.
Re: SQL mit 'Name%'Danke für die Vorschläge.
Re: SQL mit 'Name%'Es gibt einen anderen Weg, um dies zu erreichen.
Die FROM-Klausel erlaubt mehrere Tabellen. Zum Beispiel,
FROM t1, t2, t3 WO t1 etwas = t2 etwas und t1 etwas etwas t3.
Diese Tabellen müssen keine Tabellen sein, sie können Abfragen sein, sogar Abfragen in derselben Tabelle (z. B. reflexiver Join). In Ihrer FROM-Klausel könnten Sie beispielsweise Folgendes haben:
SELECT d1. , d2. usw
VON
(SELECT DISTINCT boardno, Startzeit, Ergebnis von Station WHERE Ergebnis LIKE '% FAIL%' UND DATUM ( Startzeit ) ZWISCHEN '1/31/2015' UND '12 / 31/2015 '
GRUPPIERE NACH boardno ZÄHLER (*)> 1) AS d1 / * Tabelle von Fehlern * / .
(SELECT DISTINCT boardno, Startzeit, Ergebnis FROM Bahnhof
WO DATUM ( Startzeit ) ZWISCHEN '31.01.2015' UND '12 / 31/2015 'UND Ergebnis LIKE '% PASS%') AS d2 / * Tabelle der Pässe * /
WO d1. = d2. usw
Sie brauchen ORDER BY wirklich nicht bis zum Ende - hier nach der letzten WHERE-Klausel -, weil es wirklich nur eine Anzeige ist - die GROUP BY sind hier die operativen Klauseln - Ihre Auswahl basiert auf einer zusammenfassenden Statistik - hier case a count (). Außerdem ist die Startzeit in Ihrer Abfrage mehrdeutig. Es ist besser zu erklären, was es ist und woher es kommt - also in meinem Beispiel bringe ich es von beiden Tabellen herein. Ich habe COUNT (*) verwendet, um die Anzahl der Zeilen (Siehe.) Anzuzeigen http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n123fsko39j44pn16zlt087e1m2h.htm&docsetVersion=9.4&locale=de )
Re: SQL mit 'Name%'Vielen Dank.
Re: SQL mit 'Name%'Ich habe den falschen Link für CALCULATED erhalten - probiere: http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n0jxri3yohqdwbn1slekmsc882gz.htm&docsetVersion=9.4&locale=de Re: SQL mit 'Name%'Ein paar andere Seiten.
Es sieht so aus, als hätte Ihr Ergebnisfeld keine Standardantworten, daher 'FAIL%'. Vielleicht möchten Sie also auf '% FAIL%' testen und / oder in Verbindung mit BTRIM () verwenden. Möglicherweise möchten Sie auch das UPPER () - Feld aktivieren, um sicherzustellen, dass die Großbuchstaben groß sind (nicht sicher, ob die JMP-Funktion aktiviert ist, checken Sie sie aus). Ich möchte noch einmal auf PASS eingehen - vielleicht möchten Sie '% PASS%' oder etwas Ähnliches.
Eine weitere Beobachtung - Sie müssen den HAVING-Test> 1 durch den HAVING-CALCULATED-Test> 1 ersetzen (siehe " http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n12wnf0zqw2frvn1bghzrncuh89m.html ").
Re: SQL mit 'Name%'Ich habe mir die Freiheit genommen, Ihre Anfrage neu zu formatieren, da sie ziemlich schwer zu lesen war. Ich ersetzte einige falsche Namen und Datumswerte und fügte Aliase zu inneren Abfragen hinzu:
SELECT COUNT(DISTINCT d3.BOARDNO)
FROM DB.STATION d3
WHERE d3.BOARDNO IN
(SELECT t.BOARDNO
FROM (SELECT d2.BOARDNO, d2.RESULT, d2.STARTTIME
FROM DB.STATION d2
WHERE d2.BOARDNO IN
(SELECT comm.BOARDNO
FROM (SELECT d1.BOARDNO, d1.RESULT, COUNT(d1.RESULT) AS TEST
FROM DB.STATION d1
WHERE d1.RESULT LIKE 'FAIL%'
GROUP BY d1.BOARDNO
HAVING TEST > 1
ORDER BY d1.STARTTIME DESC) AS COMM)
ORDER BY d2.BOARDNO, d2.STARTTIME DESC) AS T
WHERE RESULT LIKE 'PASS'
GROUP BY t.BOARDNO)
AND DATE(d3.STARTTIME) BETWEEN '1/31/2015' AND '12/31/2015'
Wie Vince sagte LIKE 'FAIL%' sollte arbeiten. Ich bemerke, dass Sie auch sagen LIKE 'PASS' . Wenn Sie keine Platzhalter benötigen, dann = 'PASS' wird gleich funktionieren.
Ich würde die SQL-Anweisungen in Ihrem Protokoll ausdrucken und dann die inneren Abfragen direkt in Ihrer Datenbank ausführen. Wenn Sie Oracle verwenden, können Sie ein Tool wie PL / SQL Developer oder Toad verwenden. Sie können auch Aliase in jede Unterabfrage einfügen, um die Stationsdatenbanktabelle zu unterscheiden.
Re: SQL mit 'Name%'Das sollte funktionieren. Das mache ich die ganze Zeit. Ohne die Datenbank zu sehen, kann ich nicht wirklich sagen, was falsch ist.
Haben Sie versucht, die letzte Zeichenfolge zu nehmen und in SQL auszuführen, um zu sehen, was die Ausgabe ist?