SQL con 'Nombre%'Hola,
Tengo una consulta SQL dentro de la base de datos abierta y busco algo como 'FAIL%'. Me gusta buscar cualquier nombre que sea FAIL ***. ¿Cómo logras eso? Actualmente solo está seleccionando 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"
);
Se ha creado la estación de nombre y dateb y datee. Gracias por tu ayuda.
Re: SQL con 'Nombre%'Gracias por las sugerencias.
Re: SQL con 'Nombre%'Hay otra forma de abordar esto.
La cláusula FROM permite múltiples tablas. Por ejemplo,
DE t1, t2, t3 DÓNDE t1.something = t2.something y t1.something = t3.something.
Estas tablas no tienen que ser tablas, pueden ser consultas, incluso consultas en la misma tabla (por ejemplo, unión reflexiva). Así, por ejemplo, en su caso, en una cláusula FROM podría tener:
SELECCIONE d1. , d2. , etc.
DESDE
(SELECT DISTINCT boardno, hora de inicio, resultado DESDE la estación DONDE resultado ME GUSTA '% FAIL%' Y LA FECHA ( hora de inicio ) ENTRE '31/01/2015' Y '12 / 31/2015 '
AGRUPAR POR boardno TENIENDO COUNT (*)> 1) AS d1 / * tabla de fallos * / ,
(SELECT DISTINCT boardno, hora de inicio, resultado DESDE estación
En que fecha ( hora de inicio ) ENTRE '31/01/2015' Y '12 / 31/2015 'Y resultado ME GUSTA '% PASS%') AS d2 / * tabla de pases * /
DÓNDE d1. = d2. , etc.
Realmente no necesita ORDER BY hasta el final, aquí, después de la última cláusula WHERE, porque es realmente solo una cosa de visualización, GROUP BY son las cláusulas operativas aquí. Su selección se basa en un resumen estadístico. caso un conteo (). Además, en su consulta, la hora de inicio es algo ambigua. Es mejor explicarlo en detalle y de dónde viene, así que en mi ejemplo, lo traigo de ambas tablas. He usado COUNT (*) que devuelve el número de filas (Ver http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n123fsko39j44pn16zlt087e1m2h.htm&docsetVersion=9.4&locale=en )
Re: SQL con 'Nombre%'Gracias.
Re: SQL con 'Nombre%'Tengo el enlace incorrecto para CALCULADO - intente: http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n0jxri3yohqdwbn1slekmsc882gz.htm&docsetVersion=9.4&locale=en Re: SQL con 'Nombre%'Un par de otros apartes.
Parece que su campo de resultados no tiene respuestas estándar, por lo tanto, 'FAIL%'. Por lo tanto, es posible que desee probar '% FAIL%' y / o usarlo junto con BTRIM (). Además, es posible que desee SUPERAR () el campo para asegurarse de que esté en mayúsculas (no está seguro de la función JMP, verifíquelo). Y segundo la observación en PASS: es posible que desee '% PASS%' o algo similar.
Otra observación: es posible que deba reemplazar la prueba HAVING> 1 con la prueba HAVING CALCULATED> 1 (vea " http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n12wnf0zqw2frvn1bghzrncuh89m.htm&docsetVersion=9.4&locale=en ").
Re: SQL con 'Nombre%'Me tomé la libertad de reformatear su consulta ya que era bastante difícil de leer. Sustituí algunos nombres y valores de fecha falsos, y añadí alias a las consultas internas:
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'
Como dijo vince ME GUSTA 'FAIL%' Deberia trabajar. Me doy cuenta de que también estás diciendo ME GUSTA 'PASS' . Si no necesitas comodines, entonces = 'PASS' Funcionará igual.
Imprimiría las sentencias de SQL en su registro y luego comenzaría ejecutando las consultas internas directamente en su base de datos. Si está utilizando Oracle, puede usar una herramienta como PL / SQL Developer o Toad. También podría colocar alias en cada subconsulta para distinguir la tabla de la base de datos de la estación.
Re: SQL con 'Nombre%'Eso debería funcionar. Lo hago todo el tiempo. Sin ver el db, realmente no puedo decir lo que está mal.
¿Ha intentado tomar la cadena final y ejecutarse en SQL para ver cuál es el resultado?