es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Uniendo consulta de agregado en diferentes rangos de período.

Estoy trabajando con datos de facturas para calcular los montos de reembolso que se pueden recibir. Algunos de ellos requieren un umbral de gasto específico para ser elegibles para el reembolso, así que necesito validación para eso. La mayoría de ellos tienen rangos de período estándar como años o trimestres, por lo que puedo unir un monto de gasto agregado al nivel transaccional para calcular los montos de reembolso, como muestra mi consulta de ejemplo a continuación.

SELECT
FacilityName,
Department,
Item,
InvoiceDate,
InvoiceSpend,
CASE WHEN YearSpend.TotalSpend > 1000000 THEN InvoiceSpend * 0.05
ELSE InvoiceSpend * 0
END AS RebateAmount
FROM Transactions
INNER JOIN
(
SELECT
YEAR(InvoiceDate) as [Year],
SUM(InvoiceSpend) as TotalSpend
FROM Transactions
GROUP BY YEAR(InvoiceDate)
) YearSpend ON YearSpend.Year = YEAR(Transactions.InvoiceDate)

Para algunos de ellos, sin embargo, tienen períodos que van de noviembre a abril, lo que abarca diferentes años y trimestres.

¿Cómo uniría la validación del nivel de gasto para aquellos con este tipo de período? ¿Hay alguna manera de unir en un rango de período como ese?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Se puede unir en un rango de periodos utilizando una combinación de las funciones AÑO y MES. Por ejemplo, si desea unir en un rango de noviembre a abril, puede utilizar la siguiente consulta:

    sql
    SELECT
    FacilityName,
    Department,
    Item,
    InvoiceDate,
    InvoiceSpend,
    CASE WHEN YearSpend.TotalSpend > 1000000 THEN InvoiceSpend * 0.05
    ELSE InvoiceSpend * 0
    END AS RebateAmount
    FROM Transactions
    INNER JOIN
    (
    SELECT
    YEAR(InvoiceDate) as [Año],
    SUM(InvoiceSpend) as TotalSpend
    FROM Transactions
    WHERE MONTH(InvoiceDate) >= 11 OR MONTH(InvoiceDate) <= 4
    GROUP BY YEAR(InvoiceDate)
    ) YearSpend ON YearSpend.Año = YEAR(Transactions.InvoiceDate)

    Esta consulta unirá la cantidad de gasto agregado con el nivel transaccional para calcular los montos de rebaja, pero solo para transacciones que ocurren entre noviembre y abril.

Comments are closed.