/* gp_GetProjectPageCountReportByCriteria 2016.03.31/jb Created SAMPLE Usage: EXECUTE dbo.gp_GetProjectPageCountReportByCriteria 542 **************************************************************************/ -- Initialize this stored procedure gp_InitializeProcedure 'gp_GetProjectPageCountReportByCriteria', 'Fetch page count report data based on account period.' GO -- Script this stored procedure in an ALTER so permissions are not lost ALTER PROCEDURE dbo.gp_GetProjectPageCountReportByCriteria @PeriodId int AS --For Performance to cut down on network bandwidth. SET NOCOUNT ON; --To Reduce the risk of lock contention SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; DECLARE @RecordsForReturn TABLE ( AccountPeriod nvarchar(32), Site nvarchar(256), Environment nvarchar(256), Complex nvarchar(128), FundGroup NVARCHAR(256), Fund NVARCHAR(4000), FundCode NVARCHAR(4000), ProjectName nvarchar(256), Frequency nvarchar(16), OutputMedia nvarchar(32), Revision nvarchar(12), OutputType nvarchar(12), Comments nvarchar(MAX), PublishDateTime nvarchar(32), [User] nvarchar(256), ProjectPageCount nvarchar(12), DocumentLink nvarchar(12) ) DECLARE @FundTable TABLE ( Id INT IDENTITY(1,1), Fund nvarchar(128) , FundCode nvarchar(16) ) CREATE TABLE #AllRecords ( Id INT IDENTITY(1,1), AccountPeriod nvarchar(32), Site nvarchar(256), Environment nvarchar(256), Complex nvarchar(128), FundGroup nvarchar(256), Fund nvarchar(128), FundCode nvarchar(16), ProjectName nvarchar(256), Frequency nvarchar(16), OutputMedia nvarchar(32), Revision nvarchar(12), OutputType nvarchar(12), Comments nvarchar(MAX), PublishDateTime nvarchar(32), [User] nvarchar(256), ProjectPageCount nvarchar(12), DocumentLink nvarchar(12), Deleted BIT ) CREATE INDEX IDX_FundGroup ON #AllRecords(FundGroup) CREATE INDEX IDX_Fund ON #AllRecords(Fund) CREATE INDEX IDX_FundCode ON #AllRecords(FundCode) DECLARE @CurrentRecord TABLE ( Id INT, AccountPeriod nvarchar(32), Site nvarchar(256), Environment nvarchar(256), Complex nvarchar(128), FundGroup nvarchar(256), Fund nvarchar(4000), FundCode nvarchar(4000), ProjectName nvarchar(256), Frequency nvarchar(16), OutputMedia nvarchar(32), Revision nvarchar(12), OutputType nvarchar(12), Comments nvarchar(MAX), PublishDateTime nvarchar(32), [User] nvarchar(256), ProjectPageCount nvarchar(12), DocumentLink nvarchar(12) ) DECLARE @FundList VARCHAR(4000) = '', @FundCodeList VARCHAR(4000) = '', @MainIndex INT, @SubIndex INT, @TotalRecordsMain INT, @TotalRecordsSub INT, @FundGroup NVARCHAR(256), @OldFundGroup NVARCHAR(256), @OldFund NVARCHAR(128), @OldFundCode NVARCHAR(16), @CurFund NVARCHAR(128), @CurFundCode NVARCHAR(16) INSERT INTO #AllRecords SELECT DISTINCT ap.AccountPeriodEnd, '' AS Site, '' AS Environment, c.ComplexName AS Complex, fg.FundGroupName AS FundGroup, f.FundName AS Fund, f.FundCode, di.DocumentInstanceName AS ProjectName, di.PeriodType AS Frequency, oq.OutputType AS OutputMedia, dio.Version AS Revision, oq.OutputType, dic.Comments, dio.LastGeneratedDate AS PublishDateTime, oq.UserName AS [User], oq.PDFPageCount AS ProjectPageCount, dio.PK_DocumentInstanceOutput AS DocumentLink, Deleted = 0 FROM OutputQueue oq INNER JOIN DocumentInstanceOutput dio ON oq.FK_DocumentInstanceOutput = dio.PK_DocumentInstanceOutput INNER JOIN DocumentInstanceOutputFormat diof ON diof.PK_DocumentInstanceOutputFormat = dio.FK_DocumentInstanceOutputFormat INNER JOIN DocumentInstance di ON di.PK_DocumentInstance = diof.FK_DocumentInstance INNER JOIN Complex c ON c.PK_Complex = di.FK_Complex INNER JOIN FundGroup fg ON fg.FK_Complex = c.PK_Complex INNER JOIN Fund f ON f.FK_FundGroup = fg.PK_FundGroup INNER JOIN ComplexAccountPeriod cap on cap.FK_Complex = c.PK_Complex AND cap.ComplexAccountPeriodType = 'SR' INNER JOIN AccountPeriod ap ON ap.PK_AccountPeriod = di.FK_AccountPeriod LEFT JOIN DocumentInstanceComment dic ON dic.FK_DocumentInstanceOutput = dio.PK_DocumentInstanceOutput LEFT JOIN UserInfo ui ON ui.PK_UserInfo = dic.FK_UserInfo AND ui.UserName = oq.UserName WHERE di.FK_AccountPeriod = 542 AND oq.OutputType IN ('PDF', 'WORD') ORDER BY Complex, FundGroup, Fund, FundCode, Revision DESC SET @MainIndex = 1; SET @OldFundGroup = ''; SET @TotalRecordsMain = (SELECT COUNT(*) FROM #AllRecords) WHILE (@MainIndex < @TotalRecordsMain) BEGIN INSERT INTO @CurrentRecord SELECT TOP 1 id, AccountPeriod, Site, Environment, Complex, FundGroup, Fund, FundCode, ProjectName, Frequency, OutputMedia, Revision, OutputType, Comments, PublishDateTime, [User], ProjectPageCount, DocumentLink FROM #AllRecords WHERE FundGroup != @OldFundGroup AND Deleted != 1 SET @FundGroup = (SELECT FundGroup FROM @CurrentRecord) IF @FundGroup != @OldFundGroup BEGIN SET @OldFundGroup = @FundGroup INSERT INTO @FundTable SELECT DISTINCT Fund, FundCode FROM #AllRecords WHERE FundGroup = @FundGroup SELECT @FundList = @FundList + Fund + ', ', @FundCodeList = @FundCodeList + FundCode + ', ' FROM @FundTable UPDATE @CurrentRecord SET Fund = @FundList, FundCode = @FundCodeList INSERT INTO @RecordsForReturn SELECT AccountPeriod, Site, Environment, Complex, FundGroup, Fund, FundCode, ProjectName, Frequency, OutputMedia, Revision, OutputType, Comments, PublishDateTime, [User], ProjectPageCount, DocumentLink FROM @CurrentRecord UPDATE #AllRecords SET Deleted = 1 WHERE FundGroup = @FundGroup DELETE FROM @FundTable DELETE FROM @CurrentRecord END SET @TotalRecordsMain = (SELECT COUNT(*) FROM #AllRecords WHERE FundGroup != @FundGroup AND Deleted != 1) SET @MainIndex = 1 SET @FundList = '' SET @FundCodeList = '' END SELECT * FROM @RecordsForReturn DROP TABLE #AllRecords GO