none
Clausula In condicionales y con AND RRS feed

  • Pregunta

  • Hola chicos gusto saludarlos. Es la primera vez que posteo en este foro y es por que estoy haciendo un pequeño proyecto con un par de amigos. No somos muy expertos en SQL Server y considero que conocemos lo básico y al enfrentarnos con una consulta que requerimos para obtener cierta información, nos dimos a la tarea de investigar en internet pero no hemos logrado el resultado esperado.

    Tenemos dos tablas. Una de de Autos, donde viene información del auto como Id, código, Nombre, Serie, NumMotor

    Y la tabla de ClasificaAuto, con los campos Linea, Marca y Modelo. La línea es por ejemplo si es un carro de lujo, austero, etc. La marca por ejemlo Mazda, WW, VMW, etc. y el modelo por ejemplo 2020,2021. Mi consulta me debe obtener aquellos productos que cierta información dada de la línea, la marca y el modelo. La consulta nos regresa la información sin problemas cuando los 3 parámetros contienen información, pero cuando no contiene información, nos regresa informción pero no es la que nos debe regresar. Por ejemplo, si queremos obtener aquellos Autos de la línea "Lujo", me debe arrojar los autos de lujo, pero si también queremos que de los de lujo nos obtenga los de la marca Mazda, me debe dar los autos de lujo de la marca mazda, pero si sólo envío como parámetro los de la marca WW, me debe traer todos los que contengan esa clasificación sin importar la linea y modelo. Estos parámetros los enviamos desde una aplicación cliente y si no envía parámetros debe ser una cadena vacía, ya que es un reporte donde el usuario irá seleccionando por los 3 niveles que son la linea marca y modelo y con base a la selección del usuario, debemos presentar la información.

    Mi consulta:

    declare @lineaAuto varchar(500)='Lujo',
    declare @marcaAuto varchar(500)='Ferrari', 
    declare @modeloAuto varchar(500)='Austero',
    
    Select A.Linea,A.Marca,A.Modelo from Autos A
    WHERE A.Linea IN(@lineaAuto)
    AND A.Marca IN(@marcaAuto)
    AND A.Modelo IN(@modeloAuto)

    Ayer vimos un caso similar en este foro donde le recomiendan al usuario incluir dentro de cada and un OR validando el valor null pero tampoco nos función. Espero me puedan ayudar y de antemano les doy las gracias

    Muchos saludos 

    • Editado PatriciaOlan jueves, 28 de enero de 2021 22:48 incompleto
    jueves, 28 de enero de 2021 22:48

Todas las respuestas

  • Hola PatriciaOlan:

    Ayer vimos un caso similar en este foro donde le recomiendan al usuario incluir dentro de cada and un OR validando el valor null pero tampoco nos función

    Similar pero no tiene nada que ver.

    Declare @Lineaauto VarChar(500) = 'Lujo';
    Declare @Marcaauto VarChar(500) = 'Ferrari';
    Declare @Modeloauto VarChar(500) = 'Austero';
    
    Select a.linea
    	 , a.marca
    	 , a.modelo
    	   From autos As a
    	   Where (a.linea = @Lineaauto Or @Lineaauto = '') 
    		 And (a.marca = @Marcaauto Or @Marcaauto = '') 
    		 And (a.modelo = @Modeloauto Or @Modeloauto = '');

    Si te fijas, el or va contra cadena vacía, no contra un null. 

    Te he cambiado el IN, porque no estás buscando dentro de una serie de elementos, estás intentando igualar una columna contra el parámetro.

    Ahora bien, si desde tú aplicación puedes mandar una lista de valores para la marca, línea o modelo, entonces hay otras maneras de aplicarlo.

    Pasar lista de valores a un procedure.

    https://javifer2.wordpress.com/2020/02/23/pasar-lista-de-valores-a-un-procedure/

    viernes, 29 de enero de 2021 5:33