繁体   English   中英

比较当月与上个月的销售额-功能-T-SQL

[英]Compare sales for the current month with the previous month - Functions - T-SQL

我创建了一个SalesMonth函数,该函数接收一个月号和一个年号作为参数,并显示一个总列表,其中包含在月和年中作为参数传递的产品。 该列表显示以下产品信息:标识符,月,年,总销售数量,平均单价,授予的总折扣和总销售价值。

请遵循以下代码:

CREATE FUNCTION SalesMonth (@month int, @year int)
RETURNS TABLE
AS
RETURN (
    SELECT
        AdventureWorks.Sales.SalesOrderDetail.ProductID,
        MONTH(AdventureWorks.Sales.SalesOrderHeader.OrderDate) as 'Mes',
        YEAR(AdventureWorks.Sales.SalesOrderHeader.OrderDate) as 'Ano',
        SUM(AdventureWorks.Sales.SalesOrderDetail.OrderQty) as 'Quantidade Total Vendida',
        AVG(AdventureWorks.Sales.SalesOrderDetail.UnitPrice) as 'Preco Unitario Médio',
        SUM(AdventureWorks.Sales.SalesOrderDetail.UnitPriceDiscount) as 'Desconto Total',
        SUM(AdventureWorks.Sales.SalesOrderDetail.LineTotal) as 'Valor Total Vendido'
    FROM
        AdventureWorks.Sales.SalesOrderDetail
    INNER JOIN
        AdventureWorks.Sales.SalesOrderHeader
    ON
        AdventureWorks.Sales.SalesOrderHeader.SalesOrderID = AdventureWorks.Sales.SalesOrderDetail.SalesOrderID
    WHERE 
        MONTH(AdventureWorks.Sales.SalesOrderHeader.OrderDate) = @month
            AND
        YEAR(AdventureWorks.Sales.SalesOrderHeader.OrderDate) = @year
    GROUP BY
            AdventureWorks.Sales.SalesOrderDetail.ProductID,
            MONTH(AdventureWorks.Sales.SalesOrderHeader.OrderDate),
            YEAR(AdventureWorks.Sales.SalesOrderHeader.OrderDate)
)

现在,我需要比较与上个月相比哪些产品的销售额有所增长。 我考虑过做类似的事情:

SELECT * 
FROM SalesMonth(10, 2001) 
WHERE SumPrice > (SELECT SumPrice FROM SalesMonth(9, 2001))

我知道这是一个严重的错误,但我想不出任何类似的信息。 有人会对此问题有类似查询的想法吗?

加入第10个月的销售和第9个月的销售。

SELECT * 
FROM SalesMonth(10, 2001) M10
INNER JOIN SalesMonth(9, 2001) M9
ON    M10.ProductId = M9.ProductID
WHERE M10.SumPrice > M9.SumPrice;

您可以通过以下方式尝试访问:

SELECT a.*, b.*, Case When a.[Desconto Total] >= b.[Desconto Total] then 'Greater than or equal to previous Month' else 'Less than previous month' End as [Comparison]
FROM SalesMonth(10, 2001) a
left join SalesMonth(9,2001) b
on a.ProductId = b.ProductId

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM