none
Consulta SQL RRS feed

  • Pregunta

  • Buenas tardes a todos. Les comento. Tengo la siguiente consulta SQL (es para probar la salida de datos)

    DECLARE @CURSO INT
    DECLARE @PORTICO INT
    SET @CURSO= 112
    SET @PORTICO=29
    
    SELECT CODIGO 
    FROM PORTICOS3_TAG 
    WHERE ((@CURSO >= GRADO_MIN AND @CURSO <= GRADO_MAX) AND @PORTICO IN (CODIGO))

    dicha consulta me devuelve este resultado.

    el problema se produce ya que esa consulta la tengo como una subconsulta dentro de otra. Acá la consulta original.

    SELECT
    		CASE 
    			WHEN  DATOS.TEMPERATURA2 =
    				 (SELECT CODIGO 
    				 FROM PORTICOS3_TAG 
    				 WHERE ((DATOS.CURSO >= GRADO_MIN AND DATOS.CURSO <= GRADO_MAX) AND DATOS.TEMPERATURA2 IN (CODIGO))) THEN 'MY1'		
    			ELSE 'MQ1'
    		END AS 'COLUMNA'	
    FROM GPS_DATOS DATOS   
    WHERE FECHA = '2018-05-02 00:00:00.000' AND HORA = '2018-05-02 14:29:25.000'

    el problema que en la subconsulta, no me trae el dato que necesito, pero si ejecuto esa subconsulta como una consulta normal, si me trae los datos.

    Por que puede ocurrir eso???? hay alguna opción que esté haciendo que no me retorne el dato que necesito??....la verdad es que ya no se que más podrá ser. Espero me puedan ayudar.

    Muchas gracias a todos. Saludos

    viernes, 18 de mayo de 2018 20:33

Todas las respuestas

  • Hola, esa consulta no te devuelve ninguna fila, y te has fijado si le quitas el filtro de la fecha?


    Votar es agradecer.
    Saludos.
    Lima-Perú

    viernes, 18 de mayo de 2018 21:07
  • Como no me devuelve ninguna fila? Claro que si, me devuelve la columna del CASE que se llama

    'COLUMNA', el problema es el filtro que no se ejecuta. debería devolver el código 29, igual que la primera consulta. 

    viernes, 18 de mayo de 2018 21:09
  • Hola Enrique Aleman:

    Por tu case, veo que se puede relacionar GPS_DATOS con PORTICOS3_TAG, ya que la columna Temperatura2, es la que puedes relacionar con Codigo, y si es correcto, siempre será mucho mejor una relación que una subconsulta

    
    SELECT CASE
               WHEN DATOS.CURSO BETWEEN P.GRADO_MIN AND P.GRADO_MAX
               THEN 'MY1'
               ELSE 'MQ1'
           END AS COLUMNA
    FROM GPS_dATOS DATOS
         INNER JOIN PORTICOS3_TAG P ON DATOS.TEMPERATURA2 = P.CODIGO
    WHERE datos.FECHA = '2018-05-02 00:00:00.000'
          AND datos.HORA = '2018-05-02 14:29:25.000';

    No obstante, y tal cual te indica Augusto1982, estas seguro de que el filtro de fecha es correcto. Date cuenta que esa consulta solo única y exclusivamente te traerá datos, si hay algún registro de GPS_DATOS en cuya columna FECHA tenga el valor exacto '2018-05-02 00:00:00.000' y además en la columnaHORA y esto llama la atención el valor exacto para el año, mes, día, hora minuto, .... '2018-05-02 14:29:25.000'

    Si no tienes un registro que cumpla explícitamente esta condición lo demás no importa.

    Un saludo

    viernes, 18 de mayo de 2018 22:31
  • Hola amigo, si hago un select * con los filtros necesarios me traerá sólo 1 dato con la fecha y hora explícitamente. Esa consulta debería traerme 1 registro pero no lo hace. Estoy intentando resolverlo. En cuanto al INNER JOIN, no lo había probado. Crearé nuevamnete la consulta pero con INNER JOIN, no con subconsultas. Muchas gracias por tu tiempo. Te aviso cualquier cosa.

    Saludos

    domingo, 20 de mayo de 2018 22:29