ALTERPROCEDURE dbo.ReturnAllMonthInOneYearTheSalesStatics
/**//* (
@parameter1 datatype = default value,
@parameter2 datatype OUTPUT
)
*/ AS /**//* SET NOCOUNT ON */ DECLARE@tblMonthsTABLE (sMonth VARCHAR(7))
DECLARE@tblCustomersTABLE ( CustomerID CHAR(10),
CompanyName VARCHAR(50),
ContactName VARCHAR(50))
DECLARE@tblFinalTABLE ( sMonth VARCHAR(7),
CustomerID CHAR(10),
CompanyName VARCHAR(50),
ContactName VARCHAR(50),
mSales MONEY)
DECLARE@dtStartDateDATETIME,
@dtEndDateDATETIME,
@dtDateDATETIME,
@iINTEGER SET@dtEndDate='5/5/1997' SET@dtEndDate=DATEADD(DD, -1, CAST(CAST((MONTH(@dtEndDate) +1) AS VARCHAR(2)) +'/01/'+CAST(YEAR(@dtEndDate) ASVARCHAR(4)) +' 23:59:59'ASDATETIME))
SET@dtStartDate=DATEADD(MM, -1*12, @dtEndDate)
-- Get all months into the first table SET@i=0 WHILE (@i<12)
BEGIN SET@dtDate=DATEADD(mm, -1*@i, @dtEndDate)
INSERTINTO@tblMonthsSELECTCAST(YEAR(@dtDate) ASVARCHAR(4)) +'-'+ CASE WHENMONTH(@dtDate) <10 THEN'0'+CAST(MONTH(@dtDate) ASVARCHAR(2))
ELSECAST(MONTH(@dtDate) ASVARCHAR(2))
ENDAS sMonth
SET@i=@i+1 END -- Get all clients who had sales during that period into the "y" table INSERTINTO@tblCustomers SELECTDISTINCT c.CustomerID,
c.CompanyName,
c.ContactName
FROM Customers c
INNERJOIN Orders o ON c.CustomerID = o.CustomerID
WHERE o.OrderDate BETWEEN@dtStartDateAND@dtEndDate INSERTINTO@tblFinal SELECT m.sMonth,
c.CustomerID,
c.CompanyName,
c.ContactName,
0 FROM@tblMonths m CROSSJOIN@tblCustomers c
UPDATE@tblFinalSET mSales = mydata.mSales
FROM@tblFinal f INNERJOIN (
SELECT c.CustomerID,
CAST(YEAR(o.OrderDate) ASVARCHAR(4)) +'-'+ CASEWHENMONTH(o.OrderDate) <10 THEN'0'+CAST(MONTH(o.OrderDate) ASVARCHAR(2))
ELSECAST(MONTH(o.OrderDate) ASVARCHAR(2))
ENDAS sMonth,
SUM(od.Quantity * od.UnitPrice) AS mSales
FROM Customers c
INNERJOIN Orders o ON c.CustomerID = o.CustomerID
INNERJOIN[Order Details] od ON o.OrderID = od.OrderID
WHERE o.OrderDate BETWEEN@dtStartDateAND@dtEndDate GROUPBY c.CustomerID,
CAST(YEAR(o.OrderDate) ASVARCHAR(4)) +'-'+ CASEWHENMONTH(o.OrderDate) <10 THEN'0'+CAST(MONTH(o.OrderDate) ASVARCHAR(2))
ELSECAST(MONTH(o.OrderDate) ASVARCHAR(2))
END ) mydata on f.CustomerID = mydata.CustomerID AND f.sMonth = mydata.sMonth
SELECT f.sMonth,
f.CustomerID,
f.CompanyName,
f.ContactName,
f.mSales
FROM@tblFinal f
ORDERBY f.CompanyName,
f.sMonth
RETURN