none
condicionante RRS feed

  • Pregunta

  • estoy realizando una condicionante lo cual me falta un paso para concluir

    cuantosproductoshay(#*#) mayorigual 16 and cuantasventasprevias(2) igual 2 and valordbcliente(#cl_upline#) mayor 1

    pero me falta en la condicionante que indique que si en la venta anterior realizo 12 puntos 

    por favor necesito ayuda 

    saludos 

    viernes, 6 de abril de 2018 20:31

Todas las respuestas

  • Sinceramente no entiendo que intentas hacer. 

    Blog: www.sqlservertoolbox.blogspot.com.mx

    sábado, 7 de abril de 2018 1:26
  • esto es un promocion de niveles (5 niveles), lo cual indicamos si cumple hasta el nivel 3 con todo lo requerido todas las condicionantes y el nivel 4 si no cumple ya el nivel 5 no participa asi cumpla lo requerido en el nivel 5

    lunes, 9 de abril de 2018 17:17
  • Hola JLsalazar:

    Supongo que tal cual lo expresas, lo tendrás muy claro, pero para que alguien te pueda prestar ayuda, creo que tienes que afinar más.

    No obstante, me parece que estas pidiendo como relacionar una tabla consigo misma.

    https://firebird21.wordpress.com/2013/07/20/entendiendo-las-tablas-autoreferenciadas/

    Un saludo

    lunes, 9 de abril de 2018 19:31
  • seria asi en la primer condicionante si realizo un pedido mayor igual a 16 unidades con dos ventas previas me gano un congelador y automaticamente entro al siguiente nivel 

    cuantosproductoshay(#*#) mayorigual 16 and cuantasventasprevias(2) igual 2 and valordbcliente(#cl_upline#) mayor 1

    el en siguiente nivel si cumpli con el nivel de arriba entro a este nivel, donde la condicionante es si tiene 20 unidades comprada y 3 ventas previas se gana un celular  

    cuantosproductoshay(#*#) mayorigual 20 and cuantasventasprevias(3) igual 3 and valordbcliente(#cl_upline#) mayor 1

    si el usuario no cumple con las condicionantes 1 no puede entrar a la condicionante 2; esto es una programacion de niveles 

    lunes, 23 de abril de 2018 14:25
  • Hola JLsalazar:

    No te es más facil, solicitar en un procedure, cuantos y cuales de los condicionantes cumple, y en la lógica de tu aplicación realizar lo que quieras sobre la tabla que quieras.

    CREATE PROCEDURE EJEMPLOSIMPLECONDICIONANTES(@VALOR INT, @VALOR2 INT, @VALOR3 INT)
    AS
    DECLARE  @TABLACONDICIONANTES TABLE  (TB INT , CONDICIONANTE INT)
    
    INSERT INTO @TABLACONDICIONANTES
    SELECT 1,COUNT(*) FROM ARTICULOS WHERE PKEY BETWEEN @VALOR AND @VALOR2
    INSERT INTO   @TABLACONDICIONANTES
    SELECT 2, COUNT(*) FROM VENTAS WHERE PKEY = @VALOR3
    INSERT INTO   @TABLACONDICIONANTES
    SELECT 3, COUNT(*) FROM VENTAS WHERE PKEY = @VALOR3
    INSERT INTO   @TABLACONDICIONANTES
    SELECT 4, COUNT(*) FROM VENTAS WHERE PKEY = @VALOR3
    INSERT INTO   @TABLACONDICIONANTES
    SELECT 5, COUNT(*) FROM VENTAS WHERE PKEY = @VALOR3
    
    
    
    SELECT * FROM @TABLACONDICIONANTES
    RETURN
    
    Un saludo

    lunes, 23 de abril de 2018 14:42
  • te envio la captura de las condicionantes que tengo 

    

    viernes, 27 de abril de 2018 20:14
  • Hola JLsalazar:

    Lo más que me puedo aproximar a esto que solicitas es tal que así

    CREATE TABLE ventas
    (id  INT,
     cia NVARCHAR(40),
     var NVARCHAR(24)
    );
    GO
    CREATE PROCEDURE ejemplo
    (@condicionante1 INT,
     @condicionante2 INT,
     @condicionante3 INT,
     @condicionante4 INT,
     @condicionante5 INT
    )
    AS
         DECLARE @LISTA INT;
         DECLARE @TOTALPRECIO FLOAT;
         DECLARE @TOTALPUNTOS BIGINT;
         DECLARE @TOTALCREDITOS INT;
         DECLARE @TOTALCOSTO FLOAT;
         DECLARE @VENTACONCREDITOS BIT;
         DECLARE @variableComoEjemplo NVARCHAR(24)= '...';
         DECLARE @company NVARCHAR(40)= 'defecto';
         IF(@condicionante1 = 0) 
    
    /*EN CASO DE MI CONDICION = 1 */
    
             BEGIN
                 SET @LISTA =
    (
        SELECT EMPLOYEEID
        FROM Employees
        WHERE EmployeeID =
    (
        SELECT MAX(EMPLOYEEID)
        FROM Employees
    )
    ); 
    	
    /*Extraigo en una variable del procedimiento un dato */
    
                 IF(@LISTA > 100)
                     BEGIN
                         IF(@condicionante2 = 2)
                             BEGIN
                                 SET @TOTALPRECIO = isnull((SELECT CAST(UnitPrice AS FLOAT) FROM Products WHERE ProductID = 22), 0);
    
    			/*extraigo otro dato de donde sea*/
    
                                 SET @variableComoEjemplo = '999999';
                                 SET @company = 'COMPAÑIA EJEMPLO';
                             END;
                     END;
                 INSERT INTO ventas(id, cia, "var")
                 VALUES(@LISTA, @company, @variableComoEjemplo);
             END;
    GO
    EXEC ejemplo
         @CONDICIONANTE1 = 0,
         @CONDICIONANTE2 = 2,
         @CONDICIONANTE3 = 0,
         @CONDICIONANTE4 = 0,
         @CONDICIONANTE5 = 0;
    GO
    SELECT *
    FROM ventas;

    Si observas en el ejemplo que te planteo, hay un procedimiento almacenado, donde tienes tus sentencias de evaluación IF, por ejemplo, donde evaluas tus condicionantes. Dado que cada if puede tener su else, determinas uno u otro condicionante, y realizas las acciones que necesitas.

    Un procedimiento almacenado puede llamar a otro, por tanto puedes ir simplificando tu codigo, desde uno y cuando se cumpla determinada condicion hago otro procedimiento, que recoje los parametros que le pase.

    https://docs.microsoft.com/es-es/sql/t-sql/language-elements/if-else-transact-sql?view=sql-server-2017

    https://docs.microsoft.com/es-es/sql/t-sql/statements/create-procedure-transact-sql?view=sql-server-2017

    Al final, tal cual yo lo veo, eso es un ejercicio de programación en transactSql no una sentencia. Y solo tú tienes tus datos y tu lógica de lo que hace el ejericio.

    Un saludo

    sábado, 28 de abril de 2018 8:21
  • Los datos de las tablas, del ejemplo, salen de la base de datos NORTHWIND, aparte de lo creado por la sentencias.
    sábado, 28 de abril de 2018 8:22