SQL avec 'Nom%'Salut,
J'ai une requête SQL dans la base de données ouverte et je cherche quelque chose comme 'FAIL%'. J'aime rechercher un nom qui est FAIL ***. Comment y parvenez-vous? Actuellement, il ne sélectionne que 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"
);
Le nom station et dateb et datee ont été créés. Merci de votre aide.
Re: SQL avec 'Nom%'Merci pour les suggestions.
Re: SQL avec 'Nom%'Il y a une autre façon d'aborder cela.
La clause FROM autorise plusieurs tables. Par exemple,
FROM t1, t2, t3 WHERE t1.something = t2.something et t1.something = t3.something.
Ces tables ne doivent pas nécessairement être des tables, elles peuvent être des requêtes, voire des requêtes sur la même table (par exemple, une jointure réflexive). Ainsi, par exemple, dans votre cas, dans une clause FROM, vous pourriez avoir:
SÉLECTIONNER d1. , d2. , etc.
DE
(SELECT DISTINCT boardno, starttime, résultat FROM station WHERE résultat LIKE '% FAIL%' ET DATE ( Heure de début ) ENTRE LE 31/01/2015 ET LE 31/12/2015
PAR GROUPE boardno AYANT COMPTE (*)> 1) AS d1 / * table des échecs * / ,
(SELECT DISTINCT boardno, starttime, résultat FROM station
O DATE ( Heure de début ) ENTRE LE 31/01/2015 ET LE 12/12/2015 ET LE résultat LIKE '% PASS%') AS d2 / * tableau des passes * /
WHERE d1. = d2. , etc.
Vous n’avez pas vraiment besoin de ORDER BY jusqu’à la fin - ici, après la dernière clause WHERE - car c’est seulement un élément d’affichage - les GROUP BY sont les clauses opérationnelles ici - votre sélection est basée sur une statistique résumée - dans ce case un compte (). De plus, dans votre requête, l'heure de début est en quelque sorte ambiguë. Mieux vaut préciser et préciser d'où il vient - donc dans mon exemple, je l'apporte des deux tables. J'ai utilisé COUNT (*) qui renvoie le nombre de lignes (voir http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n123fsko39j44pn16zlt087e1m2h.htm&docsetVersion=9.4&locale=en )
Re: SQL avec 'Nom%'Merci.
Re: SQL avec 'Nom%'J'ai eu le mauvais lien pour CALCULATED - essayez: http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n0jxri3yohqdwbn1slekmsc882gz.htm&docsetVersion=9.4&locale=en Re: SQL avec 'Nom%'Quelques autres apartés.
Il semble que votre champ de résultats ne comporte pas de réponses standard, d'où «FAIL%». Donc, vous voudrez peut-être tester '% FAIL%' et / ou utiliser conjointement avec BTRIM (). Aussi, vous voudrez peut-être UPPER () le champ pour vous assurer qu'il est en majuscule (vous ne savez pas que JMP fonctionne, vérifiez-le). Et j'appuie l'observation sur PASS - vous voudrez peut-être '% PASS%' ou quelque chose de similaire.
Autre observation: vous devrez peut-être remplacer le test HAVING> 1 par le test HAVING CALCULATED> 1 (voir " http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n12wnf0zqw2frvn1bghzrncuh89m.htm&docsetVersion=9.4&locale=en ").
Re: SQL avec 'Nom%'J'ai pris la liberté de reformater votre requête car elle était assez difficile à lire. J'ai substitué de faux noms et valeurs de date et ajouté des alias aux requêtes internes:
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'
Comme dit Vince LIKE 'FAIL%' devrait marcher. Je remarque que vous dites aussi COMME 'PASS' . Si vous n'avez pas besoin de jokers, alors = 'PASS' fonctionnera le même.
Je voudrais imprimer les instructions SQL dans votre journal, puis commencer par exécuter les requêtes internes directement sur votre base de données. Si vous utilisez Oracle, vous pouvez utiliser un outil tel que PL / SQL Developer ou Toad. Vous pouvez également mettre des alias dans chaque sous-requête pour distinguer la table de base de données de stations.
Re: SQL avec 'Nom%'Cela devrait fonctionner. Je le fais tout le temps. Sans voir la base de données, je ne peux pas vraiment dire ce qui ne va pas.
Avez-vous essayé de prendre la dernière chaîne et d’exécuter en SQL pour voir le résultat?