HI I have this SQL statement as a stored procedure, that is used in a SSRS report to show which items have gone over budget (the top 5) for a customer. I need now to add a variance column, to show the difference between the amount over budget and the budget amount.
USE [SUDatabase]
GO
/****** Object: StoredProcedure [dbo].[_DASHBOARD_USP_CHART_4_TOP_ITEMS] Script Date: 11/30/2009 15:55:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/* --------------------------------------------------------------------------------------------------------*/
ALTER PROCEDURE [dbo].[_DASHBOARD_USP_CHART_4_TOP_ITEMS]
(
@CUSTNMBR VARCHAR(50),
@CURRDATE DATETIME
)
AS
/*
UNIT TESTING
============
EXEC [dbo].[_DASHBOARD_USP_CHART_4_TOP_ITEMS] @custnmbr = 'northern ', @currdate = '2009-01-01'
*/
BEGIN
DECLARE @Custnmbr1 varchar(50)
SELECT TOP 1 @Custnmbr1 = CUSTNMBR FROM RM00101 WHERE CUSTNAME = @CUSTNMBR
SELECT TOP 5 v.ITEMNMBR
, v.ITEMDESC
, ISNULL(v.EXPENSE, 0) AS EXPENSE
, [AVG6M] =
(
SELECT ISNULL(AVG(a.EXPENSE), 0)
FROM dbo.[View_Item_Expense] a
WHERE v.ITEMNMBR = a.ITEMNMBR
AND a.CUSTNMBR = @Custnmbr1
AND
(
(a.DOC_YEAR = YEAR(DATEADD(MONTH, -1, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -1, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -2, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -2, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -3, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -3, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -4, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -4, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -5, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -5, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -6, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -6, @CURRDATE)))
)
)
--, LEFT(DATENAME(MONTH,DATEADD(MONTH, v.DOC_MONTH - 1, 0)),3) AS MONTH_NAME
--, v.DOC_YEAR
--, v.CUSTNMBR
--, v.CUSTNAME
FROM dbo.[View_Item_Expense] v
WHERE v.DOC_YEAR = YEAR(@CURRDATE) AND v.DOC_MONTH = MONTH(@CURRDATE) AND v.CUSTNMBR = @Custnmbr1
ORDER BY v.EXPENSE DESC
END
USE [SUDatabase]
GO
/****** Object: StoredProcedure [dbo].[_DASHBOARD_USP_CHART_4_TOP_ITEMS] Script Date: 11/30/2009 15:55:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/* --------------------------------------------------------------------------------------------------------*/
ALTER PROCEDURE [dbo].[_DASHBOARD_USP_CHART_4_TOP_ITEMS]
(
@CUSTNMBR VARCHAR(50),
@CURRDATE DATETIME
)
AS
/*
UNIT TESTING
============
EXEC [dbo].[_DASHBOARD_USP_CHART_4_TOP_ITEMS] @custnmbr = 'northern ', @currdate = '2009-01-01'
*/
BEGIN
DECLARE @Custnmbr1 varchar(50)
SELECT TOP 1 @Custnmbr1 = CUSTNMBR FROM RM00101 WHERE CUSTNAME = @CUSTNMBR
SELECT TOP 5 v.ITEMNMBR
, v.ITEMDESC
, ISNULL(v.EXPENSE, 0) AS EXPENSE
, [AVG6M] =
(
SELECT ISNULL(AVG(a.EXPENSE), 0)
FROM dbo.[View_Item_Expense] a
WHERE v.ITEMNMBR = a.ITEMNMBR
AND a.CUSTNMBR = @Custnmbr1
AND
(
(a.DOC_YEAR = YEAR(DATEADD(MONTH, -1, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -1, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -2, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -2, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -3, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -3, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -4, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -4, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -5, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -5, @CURRDATE)))
OR (a.DOC_YEAR = YEAR(DATEADD(MONTH, -6, @CURRDATE)) AND a.DOC_MONTH = MONTH(DATEADD(MONTH, -6, @CURRDATE)))
)
)
--, LEFT(DATENAME(MONTH,DATEADD(MONTH, v.DOC_MONTH - 1, 0)),3) AS MONTH_NAME
--, v.DOC_YEAR
--, v.CUSTNMBR
--, v.CUSTNAME
FROM dbo.[View_Item_Expense] v
WHERE v.DOC_YEAR = YEAR(@CURRDATE) AND v.DOC_MONTH = MONTH(@CURRDATE) AND v.CUSTNMBR = @Custnmbr1
ORDER BY v.EXPENSE DESC
END