none
Como sumar tomando el max maximo valor de una tabla RRS feed

  • Pregunta

  • Hola buen dia,

    Escribo para ayuda de como obtener un valor maximo de una columna de una tabla y a ese valor sumarle un valor constante. teniendo en cuenta de que la columna no es INT si no es VARCHAR.

    Ejemplo:

    select MAX(num_comprobante) from tb_venta_inter, al valor que me de quiero sumarle un valor constante ejemplo 1

    martes, 23 de agosto de 2016 0:25

Respuestas

  • jeckson vasquez,

    La consulta sql que te propuse suma una unidad a partir de una constante, debes reemplazar la constante por el nombre de la columna:

    ALTER PROCEDURE [dbo].[spmostrar_num_comprobante]
    AS 
    BEGIN
    	SELECT 
    		CONCAT('001-', RIGHT(
    				CONCAT('0000000000', 
    				MAX(CONVERT(int, RIGHT(num_comprobante, 10))) + 1), 10)) 
    	FROM
    		tb_venta_inter
    END


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 23 de agosto de 2016 1:12

Todas las respuestas

  • jeckson vasquez,

    Entiendo que la columna [num_comprobante] almacena valores de secuencia, ¿verdad?, ¿qué forma tienen?:

    1- 000150
    2- 001-000150
    

    En caso la columna [num_comprobante] tenga la forma 1, puedes hacer lo siguiente:

    SELECT MAX(CONVERT(int, num_comprobante)) + 1 FROM T;
    --Resultado: 151


    En caso la columna [num_comprobante] tenga la forma 2, puedes hacer lo siguiente:

    SELECT MAX(CONVERT(int, RIGHT(num_comprobante, 6))) + 1 FROM T;
    --Resultado: 151


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 23 de agosto de 2016 0:37
  • Si es para sacer una secuencia
    2- 001-000150
    que quedaria 001-000151
    martes, 23 de agosto de 2016 0:39
  • Intente el metodo 2 pero no me da el valor 001-000151 sino que al ejecutar la consulta me da me imagino que el valor de cuanto registros tengo en la tabla

    martes, 23 de agosto de 2016 0:44
  • Intente el metodo 2 pero no me da el valor 001-000151 sino que al ejecutar la consulta me da me imagino que el valor de cuanto registros tengo en la tabla
    martes, 23 de agosto de 2016 0:44
  • por que aparece un 2 solamente
    martes, 23 de agosto de 2016 0:45
  • Si es para sacer una secuencia
    2- 001-000150
    que quedaria 001-000151

    Veo que has formulado una pregunta similar en la sección c#, si se trata de lo mismo  tomaré la secuencia de ejemplo que muestras:

    001-0000000025

    SELECT 
    CONCAT('001-', RIGHT(CONCAT('0000000000', MAX(CONVERT(int, RIGHT('001-0000000025', 10))) + 1), 10)) 
    FROM
    --Resultado 001-0000000026




    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    martes, 23 de agosto de 2016 0:46
  • si la misma pero quiero saber que metodo me funcionaria mejor, ya que tengo un procemiento almacenado en sqlsever que me muestra en un datagridview en ultimo numero de comprobnate de una venta pero, no se que es mejor si al procemiento almacenado me sume 1 automaticamente al ultimo numero de comprobante o que al mostrarlo en el datagridview en el FORM lo haga desde hay y no desde la base de datos directamente.
    martes, 23 de agosto de 2016 0:51
  • jeckson vasquez,

    Pienso que el lugar donde se haga la operación es irrelevante considerando además que es una simple adición de una unidad, en caso tengas un origen vinculado al objeto de tipo DataGridView -mediante la propiedad DataSource-  quizá sea mas conveniente hacerlo en la consulta sql para que los datos se pinten sin realizar ninguna modificación.

    Lo que si debes de tomar relevancia es en cuidar que el valor seleccionado no sea ocupado por otro usuario, situación que podría darse en un contexto de concurrencia.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 23 de agosto de 2016 0:58
  • Lo probe y me da solamente el valor que coloque despues del +1 ejemplo:

    SELECT 
    CONCAT('001-', RIGHT(CONCAT('0000000000', MAX(CONVERT(int, RIGHT('001-0000000025', 10))) + 1), 10)) 
    FROM
    --Resultado 001-0000000001

    SELECT 
    CONCAT('001-', RIGHT(CONCAT('0000000000', MAX(CONVERT(int, RIGHT('001-0000000025', 10))) + 10), 10)) 
    FROM
    --Resultado 001-0000000010

    y asi sucesivamente.

    no me toma el maximo valor que alla en los registros y le suma 1

    Actualmente mi procemiento almacenado esta asi

    USE [db_tpexpress]
    GO
    /****** Object:  StoredProcedure [dbo].[spmostrar_num_comprobante]    Script Date: 22/08/2016 19:14:01 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER proc [dbo].[spmostrar_num_comprobante]
    as
    select MAX(num_comprobante) from tb_venta_inter

    martes, 23 de agosto de 2016 1:00
  • jeckson vasquez,

    La consulta sql que te propuse suma una unidad a partir de una constante, debes reemplazar la constante por el nombre de la columna:

    ALTER PROCEDURE [dbo].[spmostrar_num_comprobante]
    AS 
    BEGIN
    	SELECT 
    		CONCAT('001-', RIGHT(
    				CONCAT('0000000000', 
    				MAX(CONVERT(int, RIGHT(num_comprobante, 10))) + 1), 10)) 
    	FROM
    		tb_venta_inter
    END


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 23 de agosto de 2016 1:12
  • Listo Solucionado me ayudo demasiado tus ayudas manito arriba :)!

    Quedo asi solo habia que modificar esto

    USE [db_tpexpress]
    GO
    /****** Object:  StoredProcedure [dbo].[spmostrar_num_comprobante]    Script Date: 22/08/2016 19:14:01 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[spmostrar_num_comprobante]
    AS
    BEGIN
        SELECT
            CONCAT('001-', RIGHT(CONCAT('0000000000',MAX(CONVERT(int, RIGHT(num_comprobante, 9))) + 1), 9))
        FROM
            tb_venta_inter
    END

    el numero 10 lo cambie a 9 y funciono a la perfeccion lo que queria hacer.

    no me estas preguntando pero lo hago asi es por que cada taquilla de pago es unica y tiene que generar sus comprobantes diferentes. cada taquilla tiene su numero de comprobante diferente. Son independiente cada una.

    Gracias....

    martes, 23 de agosto de 2016 1:33