具有折扣的月销售存储过程

时间:2014-03-07 05:36:57

标签: sql stored-procedures accounting sales

我需要有关如何在我们公司中创建存储过程或许多存储过程以生成月度销售报告的建议。我缩短了表格,使其更容易理解:

  We have two tables: 
        ITEM_SALES which consists of: 
        Item_ID
        Name
        Store
        Sales_Date
        Sales_Price
        Quantity


  And then
        ITEM_DISCOUNT which consists of: 
        Item_ID
        Name
        Store
        Sales_Price
        Date_From
        Date_To

说明:每个月之后,我们的不同商店会向我们发送一份报告,说明他们有哪些折扣。这些折扣可以从一天到多天不等,因此我们有Date_From,Date_to。

我的想法:要制作此销售报告,我需要一个首先获取ITEM_SALES中所有销售的过程,然后检查ITEM_DISCOUNT中的所有折扣,并覆盖在选定时间段内具有类似Item_ID,名称和商店的折扣。

示例:因此,如果一个项目最初的sales_price为99, - 然后折扣sales_price为79, - 对于2014-01-02到2014-01-10,它必须在此期间被覆盖,所以报告显示正确的数字。

这可以理解吗?任何人都可以帮助我或在路上给我一些提示吗?临时表对此有好处吗?

如果需要更多信息,我会提供!

1 个答案:

答案 0 :(得分:1)

您可以使用存储过程中的LEFT JOIN创建报告,其中需要报告的月份和年份可以作为参数传递,如下所示:

SQL Server:

CREATE PROCEDURE GetSalesReport 
   @month INT, 
   @year  INT 
AS 
  SELECT isa.Item_ID,
         isa.Name,
         isa.Store,
         isa.Sales_Date,
         COALESCE(id.Sales_Price, isa.Sales_Price) AS SalesPrice,
         isa.Quantity
       FROM ITEM_SALES AS isa
       LEFT JOIN ITEM_DISCOUNT AS id
       ON  isa.Item_ID = id.Item_ID
       AND isa.Name = id.Name
       AND isa.Store = id.Store
       AND isa.Sales_Date BETWEEN id.Date_From AND id.Date_To 
       WHERE MONTH(isa.Sales_Date) = @month AND YEAR(isa.Sales_Date) = @year