|
naresh0407
Starting Member
30 Posts |
Posted - 2010-11-08 : 09:29:55
|
| This is my query which is pivot format which i am trying to convert it into normal stored procedure.Reports is to find no of employees whose scehduled hours is less than 24,b/w 24 and 48 and greater than 48 hrs for 1st week,2nd week,3rd week and 4th week.User will pass Sunday date say 8/22/2010 then reports should be like this Scehduled Hrs 8/1/2010 8/8/2010 8/15/2010 8/22/2010 DataALTER PROCEDURE [dbo].[SAR_Sp_GetSchedule] (@date1 DATETIME, @date2 DATETIME, @date3 DATETIME, @date4 DATETIME,@CampaignID INT,@TotalEmployee int) ASDECLARE @query VARCHAR(MAX)BEGINSET @query = 'SELECT '+ CHAR(39) + 'Greater than 44 Hrs' + CHAR(39) + ' AS HeadCount, [' + CONVERT(VARCHAR,@date1,101) + '], [' + CONVERT(VARCHAR,@date2,101)+ '], [' + CONVERT(VARCHAR,@date3,101) + '], [' + CONVERT(VARCHAR,@date4,101) + ']' +'FROM(SELECT WeekStartDate,convert(numeric(4,0),dbo.FDiv(Count(Case When Totalhours>=44.00 Then EmpNo end),'+cast(@TotalEmployee as varchar)+')*100) as empno FROM SAR_WeekData where CampaignID=' + CAST(@CampaignID AS VARCHAR) + ' group by WeekStartDate) AS SourceTablePIVOT(max(empno)FOR WeekStartDate IN (' + '[' + CONVERT(VARCHAR,@date1,101) + '], [' + CONVERT(VARCHAR,@date2,101)+ '], [' + CONVERT(VARCHAR,@date3,101) + '], [' + CONVERT(VARCHAR,@date4,101) + ']' + ')) AS PivotTableUNIONSELECT ' + CHAR(39) + 'a Less Than 25.00' + CHAR(39) + ' AS TotalHours, [' + CONVERT(VARCHAR,@date1,101) + '], [' + CONVERT(VARCHAR,@date2,101)+ '], [' + CONVERT(VARCHAR,@date3,101) + '], [' + CONVERT(VARCHAR,@date4,101) + ']' + 'FROM(SELECT WeekStartDate,convert(numeric(4,0),dbo.FDiv(Count(Case When Totalhours<=25.00 then EmpNo end),'+cast(@TotalEmployee as varchar)+')*100) as empno FROM SAR_WeekData where CampaignID=' + CAST(@CampaignID AS VARCHAR) + ' group by WeekStartDate) AS SourceTablePIVOT(max(empno)FOR WeekStartDate IN (' + '[' + CONVERT(VARCHAR,@date1,101) + '], [' + CONVERT(VARCHAR,@date2,101)+ '], [' + CONVERT(VARCHAR,@date3,101) + '], [' + CONVERT(VARCHAR,@date4,101) + ']' + ')) AS PivotTableunionSELECT ' + CHAR(39) + 'b/w 25.10 and 30.00' + CHAR(39) + ' AS TotalHours, [' + CONVERT(VARCHAR,@date1,101) + '], [' + CONVERT(VARCHAR,@date2,101)+ '], [' + CONVERT(VARCHAR,@date3,101) + '], [' + CONVERT(VARCHAR,@date4,101) + ']' + 'FROM(SELECT WeekStartDate,convert(numeric(4,0),dbo.FDiv(Count(Case When Totalhours>25.00 and Totalhours<=30.00 then EmpNo end),'+cast(@TotalEmployee as varchar)+')*100)-convert(numeric(4,0),dbo.FDiv(Count(Case When Totalhours<=25.00 then EmpNo end),'+cast(@TotalEmployee as varchar)+')*100) as empno FROM SAR_WeekData where CampaignID=' + CAST(@CampaignID AS VARCHAR) + ' group by WeekStartDate) AS SourceTablePIVOT(max(empno)FOR WeekStartDate IN (' + '[' + CONVERT(VARCHAR,@date1,101) + '], [' + CONVERT(VARCHAR,@date2,101)+ '], [' + CONVERT(VARCHAR,@date3,101) + '], [' + CONVERT(VARCHAR,@date4,101) + ']' + ')) AS PivotTableunionSELECT ' + CHAR(39) + 'b/w 30.10 and 44.00' + CHAR(39) + ' AS TotalHours, [' + CONVERT(VARCHAR,@date1,101) + '], [' + CONVERT(VARCHAR,@date2,101)+ '], [' + CONVERT(VARCHAR,@date3,101) + '], [' + CONVERT(VARCHAR,@date4,101) + ']' + 'FROM(SELECT WeekStartDate,convert(numeric(4,0),dbo.FDiv(Count(Case When Totalhours>=30.00 and Totalhours<44.00 then EmpNo end),'+cast(@TotalEmployee as varchar)+')*100)-(convert(numeric(4,0),dbo.FDiv(Count(Case When Totalhours<=25.00 then EmpNo end),'+cast(@TotalEmployee as varchar)+')*100)+ convert(numeric(4,0),dbo.FDiv(Count(Case When Totalhours>25.00 and Totalhours<=30.00 then EmpNo end),'+cast(@TotalEmployee as varchar)+')*100)) as empno FROM SAR_WeekData where CampaignID=' + CAST(@CampaignID AS VARCHAR) + ' group by WeekStartDate) AS SourceTablePIVOT(max(empno)FOR WeekStartDate IN (' + '[' + CONVERT(VARCHAR,@date1,101) + '], [' + CONVERT(VARCHAR,@date2,101)+ '], [' + CONVERT(VARCHAR,@date3,101) + '], [' + CONVERT(VARCHAR,@date4,101) + ']' + ')) AS PivotTable';Exec(@query)end |
 |
|