我需要有关如何在我们公司中创建存储过程或许多存储过程以生成月度销售报告的建议。我缩短了表格,使其更容易理解:
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,它必须在此期间被覆盖,所以报告显示正确的数字。
这可以理解吗?任何人都可以帮助我或在路上给我一些提示吗?临时表对此有好处吗?
如果需要更多信息,我会提供!
答案 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