Sumar y promedio columna de una tabla

Armando 0 Puntos de reputación
2024-11-07T23:27:41.81+00:00

Imagen del usuario

En la imagen anterior tengo una tabla (simplificada) clasica de un kardex de productos, como pueden observar solo hay COSTOCOMPRA cada vez que existe una entrada.

A continuacion el resultado que deseo obtener.

Imagen del usuario

Esta imagen es lo que deseo obtener con la consulta en SQL Server.

El saldo del producto en cantidades y el costo promedio que varie cada vez que se realiza una entrada. Por ejemplo en la entrada de 40 (en la primera imagen, entro a costo 108), para tomar el COSTOPROMEDIO, sumo (110+108) / 2 me da 109 como COSTOPROMEDIO, este lo sigo conservando hasta que aparezca otra entrada, asi sucesivamente.

Por favor su apoyo como seria la consulta, lo he intentado pero realmente se me complica porque no se como acumular y como tomar el dato de la fila anterior.

Gracias anticipadas .

SQL Server
SQL Server
Familia de sistemas de análisis y administración de bases de datos relacionales de Microsoft para soluciones de comercio electrónico, línea de negocio y almacenamiento de datos.
111 preguntas
0 comentarios No hay comentarios
{count} votos

1 respuesta

Ordenar por: Muy útil
  1. Gao Chen 2,955 Puntos de reputación Proveedor de Microsoft
    2024-11-08T20:27:30.42+00:00

    Hola Armando,

    ¡Bienvenido(a) a Microsoft Q&A!

    Para calcular el saldo y el costo promedio en SQL Server, puedes usar una consulta que mantenga un registro de las entradas y salidas de productos. Aquí te muestro un ejemplo de cómo podrías estructurar tu consulta:

    Ejemplo de Consulta SQL

    WITH CTE AS (
        SELECT 
            FECHA,
            PRODUCTO,
            ENTRADA,
            SALIDA,
            SUM(ENTRADA - ISNULL(SALIDA, 0)) OVER (ORDER BY FECHA) AS SALDO,
            CASE 
                WHEN ENTRADA IS NOT NULL THEN 
                    (SELECT AVG(COSTO) 
                     FROM (VALUES (110), (108)) AS C(COSTO)) -- Aquí puedes agregar más costos según las entradas
                ELSE 
                    NULL 
            END AS COSTO_PROMEDIO
        FROM 
            TuTabla
    )
    SELECT 
        FECHA,
        PRODUCTO,
        ENTRADA,
        SALIDA,
        SALDO,
        COSTO_PROMEDIO,
        SALDO * ISNULL(COSTO_PROMEDIO, 0) AS VALORIZADO
    FROM 
        CTE;
    
    

    Explicación:

    1. CTE (Common Table Expression): Se utiliza para calcular el saldo acumulado y el costo promedio.
    2. SUM() OVER(): Calcula el saldo acumulado de entradas y salidas.
    3. CASE: Determina el costo promedio basado en las entradas. Aquí puedes ajustar la lógica para incluir todos los costos de las entradas anteriores.
    4. VALORIZADO: Se calcula multiplicando el saldo por el costo promedio.

    Adicionalmente, asegúrate de que los costos de las entradas se registren correctamente en la tabla. Tambien puedes ajustar la lógica del costo promedio para que se adapte a tus necesidades específicas, como incluir solo los costos de las entradas anteriores.

    Espero que información brindada fuera útil. Si necesitas más asistencia, estoy a tu disposición.

    Atentamente,

    Gao


    Si esta respuesta resolvió tu consulta, por favor haz clic en 'Aceptar respuesta'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.


Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.