none
Ayuda para seleccionar campos de dos tablas RRS feed

  • Pregunta

  • Hola quisiera que me ayuden con lo siguiente ,tengo estas dos tablas y dos parámetros llamados  @Mes y @Año  necesito seleccionar de la tabla clientes el campo contrato y tarifa pero si el contrato existe en la tabla promoción y el campo mes y año es igual a su respectiva variable @Mes y @Año entonces seleccione de la tabla cliente contrato y de la tabla promoción el campo tarifa y si la tarifa es igual a 0 no lo seleccione de ninguna tabla

    sábado, 16 de noviembre de 2019 14:33

Respuestas

  • Hola Antonio.

    ¿Cómo se declararon las columnas Mes y Ano de la tabla Promoción?

     

    -- código #1 
    declare @Mes tinyint, @Año smallint;
    set @Mes= 10;
    set @Año= 2019; SELECT C.Contrato, coalesce (P.Tarifa, C.Tarifa) as Tarifa from Cliente as C outer apply (SELECT Tarifa from Promocion as T where T.Contrato = C.Contrato and T.Mes = @Mes and T.Ano = @Año) as P where coalesce (P.Tarifa, C.Tarifa, 0) <> 0;


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como respuesta Antonio Figueroa sábado, 16 de noviembre de 2019 18:37
    • Editado José Diz domingo, 17 de noviembre de 2019 10:05
    sábado, 16 de noviembre de 2019 17:19
  • Una ultima consulta tengo una tabla llamada Pagos con la siguiente estructura Contrato,Mes,Ano,Cancelado necesito que tampoco se seleccione si Mes y ano son iguales a las variables en esta tabla 

    Prueba

    -- código #1 v4
    declare @Mes varchar(20), @Año varchar(20);
    set @Mes= 'Diciembre';
    set @Año= '2019';
    
    SELECT C.Contrato, coalesce (P.Tarifa, C.Tarifa) as Tarifa
      from Cliente as C
           outer apply (SELECT Tarifa from Promocion as T 
                          where T.Contrato = C.Contrato
                                and T.Mes = @Mes
                                and T.Ano = @Año) as P
      where coalesce (P.Tarifa, C.Tarifa, 0) <> 0
            and not exists (SELECT * from Pagos as T 
                              where T.Contrato = C.Contrato
                                    and T.Mes = @Mes
                                    and T.Ano = @Año);


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como respuesta Antonio Figueroa sábado, 16 de noviembre de 2019 19:20
    • Editado José Diz domingo, 17 de noviembre de 2019 10:06
    sábado, 16 de noviembre de 2019 19:16

Todas las respuestas

  • Hola Antonio.

    ¿Cómo se declararon las columnas Mes y Ano de la tabla Promoción?

     

    -- código #1 
    declare @Mes tinyint, @Año smallint;
    set @Mes= 10;
    set @Año= 2019; SELECT C.Contrato, coalesce (P.Tarifa, C.Tarifa) as Tarifa from Cliente as C outer apply (SELECT Tarifa from Promocion as T where T.Contrato = C.Contrato and T.Mes = @Mes and T.Ano = @Año) as P where coalesce (P.Tarifa, C.Tarifa, 0) <> 0;


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como respuesta Antonio Figueroa sábado, 16 de noviembre de 2019 18:37
    • Editado José Diz domingo, 17 de noviembre de 2019 10:05
    sábado, 16 de noviembre de 2019 17:19
  • Hola las columnas Mes y Año las declare como varchar
    sábado, 16 de noviembre de 2019 17:24
  • Hola las columnas Mes y Año las declare como varchar


    ¿Se puede publicar una muestra de los datos?

         SELECT top (5) Contrato, Mes, Ano, Tarifa
           from Promocion;

     


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz sábado, 16 de noviembre de 2019 17:45
    sábado, 16 de noviembre de 2019 17:42
  • el contrato 0001 no deberia ser selccionado por tener tarifa 0 y le contrato 0002 debe ser seleccionado pero con tarifa 200 de la tabla promocion
    sábado, 16 de noviembre de 2019 18:18
  • Una ultima consulta tengo una tabla llamada Pagos con la siguiente estructura Contrato,Mes,Ano,Cancelado necesito que tampoco se seleccione si Mes y ano son iguales a las variables en esta tabla 
    sábado, 16 de noviembre de 2019 18:37
  • el contrato 0001 no deberia ser selccionado por tener tarifa 0 y le contrato 0002 debe ser seleccionado pero con tarifa 200 de la tabla promocion

    Prueba

    -- código #1 v3
    declare @Mes varchar(20), @Año varchar(20);
    set @Mes= 'Diciembre';
    set @Año= '2019';
    
    SELECT C.Contrato, coalesce (P.Tarifa, C.Tarifa) as Tarifa
      from Cliente as C
           outer apply (SELECT Tarifa from Promocion as T 
                          where T.Contrato = C.Contrato
                                and T.Mes = @Mes
                                and T.Ano = @Año) as P
      where coalesce (P.Tarifa, C.Tarifa, 0) <> 0;



    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    sábado, 16 de noviembre de 2019 19:08
  • Una ultima consulta tengo una tabla llamada Pagos con la siguiente estructura Contrato,Mes,Ano,Cancelado necesito que tampoco se seleccione si Mes y ano son iguales a las variables en esta tabla 

    Prueba

    -- código #1 v4
    declare @Mes varchar(20), @Año varchar(20);
    set @Mes= 'Diciembre';
    set @Año= '2019';
    
    SELECT C.Contrato, coalesce (P.Tarifa, C.Tarifa) as Tarifa
      from Cliente as C
           outer apply (SELECT Tarifa from Promocion as T 
                          where T.Contrato = C.Contrato
                                and T.Mes = @Mes
                                and T.Ano = @Año) as P
      where coalesce (P.Tarifa, C.Tarifa, 0) <> 0
            and not exists (SELECT * from Pagos as T 
                              where T.Contrato = C.Contrato
                                    and T.Mes = @Mes
                                    and T.Ano = @Año);


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Marcado como respuesta Antonio Figueroa sábado, 16 de noviembre de 2019 19:20
    • Editado José Diz domingo, 17 de noviembre de 2019 10:06
    sábado, 16 de noviembre de 2019 19:16
  • Muchas Gracias por su valiosa ayuda es lo que necesitaba
    sábado, 16 de noviembre de 2019 19:20