SQL con 'Nome%'Ciao,
Ho una query SQL all'interno del database aperto e alla ricerca di qualcosa come "FAIL%". Mi piace cercare un nome qualsiasi FAIL ***. Come lo realizzi? Attualmente seleziona solo FAIL%.
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"
);
Il nome stazione, dateb e datee è stato creato. Grazie per l'aiuto.
Ri: SQL con 'Nome%'Grazie per i suggerimenti.
Ri: SQL con 'Nome%'C'è un altro modo per avvicinarsi a questo.
La clausola FROM consente più tabelle. Per esempio,
FROM t1, t2, t3 WHERE t1.qualcosa = t2.qualcosa e t1.qualcosa = t3.qualcosa.
Queste tabelle non devono essere tabelle, possono essere query, anche query sulla stessa tabella (ad esempio join riflessivo). Quindi, ad esempio, nel tuo caso, in una clausola FROM potresti avere:
SELEZIONA d1. , d2. , ecc
A PARTIRE DAL
(SELECT DISTINCT boardno, starttime, result FROM station WHERE risultato LIKE '% FAIL%' E DATA ( orario di inizio ) TRA "1/31/2015" E "12/31/2015"
RAGGRUPPA PER stirono HAVING COUNT (*)> 1) AS tabella d1 / * di errori * / ,
(SELEZIONA DISTINCT boardno, ora di inizio, risultato FROM stazione
DOVE DATE ( orario di inizio ) TRA "1/31/2015" E "12/31/2015" E risultato LIKE '% PASS%') Tabella di passaggi AS d2 / * * /
DOVE d1. = d2. , ecc
Non hai davvero bisogno dell'ORDINE BY fino alla fine - qui, dopo l'ultima clausola WHERE - perché è solo una cosa da esposizione - le clausole operative di GROUP BY sono qui - la tua selezione si basa su una statistica riassuntiva - in questo caso un conteggio (). Inoltre, nella tua query, l'ora di inizio è un po 'ambigua. Meglio affermarlo esplicitamente e da dove viene, quindi nel mio esempio lo sto portando da entrambi i tavoli. Ho usato COUNT (*) che restituisce il numero di righe (Vedi http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n123fsko39j44pn16zlt087e1m2h.htm&docsetVersion=9.4&locale=en )
Ri: SQL con 'Nome%'Grazie.
Ri: SQL con 'Nome%'Ho ottenuto il link sbagliato per CALCOLATO - prova: http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n0jxri3yohqdwbn1slekmsc882gz.htm&docsetVersion=9.4&locale=en Ri: SQL con 'Nome%'Un paio di altri.
Sembra che il tuo campo risultato non abbia risposte standard, quindi 'FAIL%'. Pertanto, potresti voler testare "% FAIL%" e / o utilizzare insieme a BTRIM (). Inoltre, potresti voler UPPER () sul campo per assicurarti che sia maiuscolo (non sono sicuro della funzione JMP, dai un'occhiata). E applico l'osservazione su PASS: potresti volere "% PASS%" o qualcosa di simile.
Un'altra osservazione: potrebbe essere necessario sostituire il test HAVING> 1 con il test HAVING CALCULATED> 1 (vedere " http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n12wnf0zqw2frvn1bghzrncuh89m.htm&docsetVersion=9.4&locale=en ").
Ri: SQL con 'Nome%'Mi sono permesso di riformattare la query perché era piuttosto difficile da leggere. Ho sostituito alcuni nomi falsi e valori di data e aggiunto alias alle query interne:
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'
Come disse Vince LIKE 'FAIL%' dovrebbe funzionare. Noto che stai anche dicendo LIKE 'PASS' . Se non hai bisogno di caratteri jolly, allora = 'PASS' funzionerà allo stesso modo.
Stamperei le istruzioni SQL sul tuo log, quindi inizio eseguendo le query interne direttamente sul tuo database. Se stai usando Oracle puoi usare uno strumento come PL / SQL Developer o Toad. Inoltre è possibile inserire alias in ogni subquery per distinguere la tabella del database della stazione.
Ri: SQL con 'Nome%'Questo dovrebbe funzionare Lo faccio tutto il tempo. Senza vedere il db, non posso davvero dire cosa c'è che non va.
Hai provato a prendere la stringa finale ed eseguire in SQL per vedere quale sia l'output?