none
Filtrar por campo que es un alias usando una subconsulta

    Pregunta

  • Hola

    Estoy trabajando con SQL Server 2014 tengo una consulta la cual los campos Ruc y Cedula se crean atravéz de un alias y justamente necesito filtrar por esos alias pero para eso estoy creando una subconsulta en el WHERE en el estoy creando unos filtros condicionales el cual no me esta funcionando les comparto el código para que me puedan ayudar.

    SELECT ClienteId, 
    	ISNULL((CASE WHEN t.Codigo = '04' THEN c.Numero END), '') Ruc,
    	ISNULL((CASE WHEN t.Codigo = '05' THEN c.Numero END), '') Cedula, RazonSocial	 
    FROM Clientes AS c
    JOIN TipoIdentificaciones AS t
    ON c.TipoIdentificacionId = t.TipoIdentificacionId
    WHERE (((SELECT c.Numero FROM TipoIdentificaciones WHERE c.TipoIdentificacionId = 1 AND Codigo = '04') IS NULL) 
    	OR ((SELECT c.Numero FROM TipoIdentificaciones WHERE c.TipoIdentificacionId = 1 AND Codigo = '04')  LIKE '%9999999999239%')
    	AND ((SELECT c.Numero FROM TipoIdentificaciones WHERE c.TipoIdentificacionId = 2 AND Codigo = '05') IS NULL)
    	OR ((SELECT c.Numero FROM TipoIdentificaciones WHERE c.TipoIdentificacionId = 2 AND Codigo = '05') = ''))
    

    Creí que me debería mostrar el primer registro pero me esta trayendo todos.

    jueves, 17 de mayo de 2018 18:00

Respuestas

Todas las respuestas

  • Hola JulianSanchez:

    Creo que lo estas intentando de un modo inadecuado.

    La mejor manera, es que pongas como son tus dos tablas. y lo que quieres obtener.

    En el Managment Studio, sobre la base de datos, botón derecho, generar script de creacion de tabla en una ventana nueva.

    Puedes quitar los campos que no importen mucho a la relación, de tablas, para ambas (clientes y tipoidentificaciones)

    y como la salida, ya la has mencionado, será mucho más fácil ayudarte.

    Además entiendo que solo quieres traer los registros cuyo tipodientificacionid sea 1 o 2 y los codigos sean 04 o 05

    y lo que no entiendo es el LIKE '%99999999239%'

    Un saludo

    jueves, 17 de mayo de 2018 18:23
  • Trata:

    SELECT
        ClienteId,
        ISNULL((CASE WHEN t.Codigo = '04' THEN c.Numero END), '') AS Ruc,
        ISNULL((CASE WHEN t.Codigo = '05' THEN c.Numero END), '') AS Cedula,
        RazonSocial
    FROM
        Clientes AS c
        JOIN
        TipoIdentificaciones AS t
        ON c.TipoIdentificacionId = t.TipoIdentificacionId
    WHERE
    	(t.Codigo = '04' AND c.TipoIdentificacionId = 1 AND (c.Numero IS NULL OR c.Numero LIKE '%9999999999239%'))
    	OR
    	(t.Codigo = '05' AND c.TipoIdentificacionId = 2 AND (c.Numero IS NULL OR c.Numero = ''));
    


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Marcado como respuesta JulianSanchez jueves, 17 de mayo de 2018 18:57
    jueves, 17 de mayo de 2018 18:33
  • Hola

    Bueno cuando busco por RUC debo mandar el número de ruc sin usar like se me había pasado.

    Intento hacer un filtro condicional en el cual me permita buscar por Ruc, Cedula y RazonSocial

    SELECT ClienteId, 
    	ISNULL((CASE WHEN t.Codigo = '04' THEN c.Numero END), '') AS Ruc,
    	ISNULL((CASE WHEN t.Codigo = '05' THEN c.Numero END), '') AS Cedula, RazonSocial	 
    FROM Clientes AS c
    JOIN TipoIdentificaciones AS t
    ON c.TipoIdentificacionId = t.TipoIdentificacionId
    GROUP BY ClienteId, RazonSocial, c.Numero, c.TipoIdentificacionId, Codigo
    HAVING (CASE WHEN t.Codigo = '04' THEN c.Numero END) IS NULL 
    OR (CASE WHEN t.Codigo = '04' THEN c.Numero END) = 9999999999239


    jueves, 17 de mayo de 2018 18:37
  • Muchas gracias Hunchback

    ¿Que hace el segundo AND?

    (t.Codigo = '04' AND c.TipoIdentificacionId = 1 AND (c.Numero IS NULL OR c.Numero LIKE '%9999999999239%'))

    ¿Mapea c.Numero al filtro?

    jueves, 17 de mayo de 2018 18:58