Avik Roy (6/24/2013)
Hi All,I need your urgent help regarding this procedure performance tuning so that the execution time become very less.
Below is the procedure :
I know you are brand new around here but what you posted is a mess. I ran it through a free formatter.
-- sp_helptext PVC_PROC_SERVICE_DELIVERY_REQUEST_MEASUREMENTS_NCCM_Phase_II
--select Oid
--,(Select appidentity from project where oid = projectoid) ProjectId
--,Appidentity PositionID
--,name PositionName
--,sdr_StartDate PositionStartDate
--,sdr_EndDate PositionEndDate
--,isnull(CName,'NA')CName
--,isnull(CCMFlag,0) CCMFlag
--,PA.OrgName OrgName
--,financialRulesOid
--,projectoid
--into #ProjectPosition_JR_CD
--from PROJECTTEAMSLOT PTS --(Position Details)
--LEFT OUTER JOIN rptProject_Position_JR_CD_View PJC
-- ON PTS.OID = PJC.ProjectTeamSlotOid
--,(select W.Oid FinancialOid,O.name OrgName,OrgWunitOid from OrganizationalWUnit O, CommonProjectFinancials W
-- where O.oid = W.OrgWunitOid)PA
--where PA.FinancialOid = financialRulesOid
--order by oid
--
--
--sp_helptext PVC_PROC_SERVICE_DELIVERY_REQUEST_MEASUREMENTS
--PVC_PROC_SERVICE_DELIVERY_REQUEST_MEASUREMENTS_NCCM_Phase_II '12/13/2012','12/15/2012','%','%','%','%',1,1,1,1,1,1,1,0
--sp_helptext PVC_PROC_SERVICE_DELIVERY_REQUEST_MEASUREMENTS '10/01/2012','10/20/2012','All','all','%','%',1,0,1,1,1,1,1,0
CREATE PROCEDURE [dbo].[PVC_PROC_SERVICE_DELIVERY_REQUEST_MEASUREMENTS_NCCM_Phase_II] (
@pStartDate VARCHAR(10)
,@pEndDate VARCHAR(10)
,@pRequestorsPool VARCHAR(255)
,@pRegion VARCHAR(255)
,@pPC VARCHAR(255)
,@pProjectPool VARCHAR(255)
,@pRequestStatusAccepted INT
,@pRequestStatusCancelled INT
,@pRequestStatusDeclined INT
,@pRequestStatusDenied INT
,@pRequestStatusTimeout INT
,@pRequestStatusWaitingConfirm INT
,@pRequestStatusWaitingReply INT
,@pinternalRegion INT
)
AS
BEGIN
/**
Author: Jayaraj Arulandu
Date: 1/10/2010
Function: [PVC_PROC_SERVICE_DELIVERY_REQUEST_MEASUREMENTS]
Description: This report includes all requests general and specific, whether fulfilled within the MU or sent to the GSDC.
It measures the response times at several points during the process: Overall time to “Suggested/Approved” status,
Overall time to "Accepted" status, Overall MU lead-time and time to first and latest action.
Changes History:
Date ChangedBy Description
1/10/2010 Jayaraj Changed the report for Q409 release extensively.
1/23/2010 Jayaraj Added additional enhancements to this report
Promoted to Production.
01/23/10 Jayaraj Promoted to Production - Q409 Release
02/24/2011 Hemanth Excluding Project and Opportunity Pools
*/
SET NOCOUNT ON
CREATE TABLE #internal (RequestOID VARCHAR(50))
CREATE TABLE #regiontable (
requestoid NUMERIC(19, 0)
,ReceivedDatetime DATETIME
,Region VARCHAR(500)
,recipientName VARCHAR(500)
)
CREATE TABLE #pctable (
requestoid NUMERIC(19, 0)
,ReceivedDatetime DATETIME
,personname VARCHAR(500)
,recipientsPoolName VARCHAR(800)
,inbox VARCHAR(200)
)
/****** Object: Table [dbo].[rrm_temp] Script Date: 10/03/2012 16:18:08 ******/
IF EXISTS (
SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[rrm_temp]')
AND type IN (N'U')
)
DROP TABLE [dbo].[rrm_temp]
--Create table RRM_Parameter
--
--(pStartDate VARCHAR(10),
-- pEndDate VARCHAR(10),
-- pRequestorsPool VARCHAR(255),
-- pRegion VARCHAR(255),
-- pPC VARCHAR(255),
-- pProjectPool VARCHAR(255),
-- pRequestStatusAccepted int,
-- pRequestStatusCancelled int,
-- pRequestStatusDeclined int,
-- pRequestStatusDenied int,
-- pRequestStatusTimeout int,
-- pRequestStatusWaitingConfirm int,
-- pRequestStatusWaitingReply int,
-- pinternalRegion int
--)
--
--insert into RRM_Parameter
--values( @pStartDate
-- ,@pEndDate
-- ,@pRequestorsPool
-- ,@pRegion
-- ,@pPC
-- ,@pProjectPool
-- ,@pRequestStatusAccepted
-- ,@pRequestStatusCancelled
-- ,@pRequestStatusDeclined
-- ,@pRequestStatusDenied
-- ,@pRequestStatusTimeout
-- ,@pRequestStatusWaitingConfirm
-- ,@pRequestStatusWaitingReply
-- ,@pinternalRegion
--)
CREATE TABLE #results (
--ProjectId varchar(50)
--,PositionID varchar(50)
--,PositionName varchar(255)
--,PositionStartDate datetime
--,CName varchar(255)
--,CCMFlag int
--,OrgName varchar(255),
RequestOID NUMERIC(19, 0)
,ProjectPool VARCHAR(500)
,Region VARCHAR(500)
,PC VARCHAR(500)
,RequestID VARCHAR(50)
,Creator VARCHAR(500)
,CreatorsPool VARCHAR(500)
,CreateDate DATETIME
,Client VARCHAR(500)
,Project VARCHAR(500)
,Position VARCHAR(500)
,PositionOID NUMERIC(19, 0)
,FunctionalRole VARCHAR(500)
,RequestStatus VARCHAR(100)
,PositionCreated DATETIME
,Initiation DATETIME
,Completed DATETIME
,ResourceSuggested DATETIME
,StaffingAssignmentStatus VARCHAR(100)
,StaffingAssignmentResource VARCHAR(500)
,CommitmentStartDate DATETIME
,DaysToSuggested INT
,SuggestedInTime INT
,DaysToAccepted INT
,DaysToCommitment INT
,DaysToSuggestedIndicator INT
,DaysToAcceptedIndicator INT
,RequestCreatedInTime INT
,RecipientName VARCHAR(500)
,Recipient_First_Action VARCHAR(500)
,Recipient_Last_Action VARCHAR(500)
,DaysSince_First_Action INT
,DaysSince_Last_Action INT
,Request_First_Action VARCHAR(500)
,DaysSince_Request_First_Action INT
,OwnerPoolsName VARCHAR(500)
,RecipientDaysToSuggested INT
,RecipientDaysToAccepted INT
,RecipientStatus VARCHAR(500)
,ResipientCreateDate DATETIME
,RecipientRespondedDate DATETIME
,RequestTimedoutDate DATETIME
,ReceivedDatetime DATETIME
)
CREATE TABLE #temp_results (
--ProjectId varchar(50)
--,PositionID varchar(50)
--,PositionName varchar(255)
--,PositionStartDate datetime
--,CName varchar(255)
--,CCMFlag int
--,OrgName varchar(255),
RequestOID NUMERIC(19, 0)
,ProjectPool VARCHAR(500)
,Region VARCHAR(500)
,PC VARCHAR(500)
,RequestID VARCHAR(50)
,Creator VARCHAR(500)
,CreatorsPool VARCHAR(500)
,CreateDate DATETIME
,Client VARCHAR(500)
,Project VARCHAR(500)
,Position VARCHAR(500)
,PositionOID NUMERIC(19, 0)
,FunctionalRole VARCHAR(500)
,RequestStatus VARCHAR(100)
,PositionCreated DATETIME
,Initiation DATETIME
,Completed DATETIME
,ResourceSuggested DATETIME
,StaffingAssignmentStatus VARCHAR(100)
,StaffingAssignmentResource VARCHAR(500)
,CommitmentStartDate DATETIME
,DaysToSuggested INT
,SuggestedInTime INT
,DaysToAccepted INT
,DaysToCommitment INT
,DaysToSuggestedIndicator INT
,DaysToAcceptedIndicator INT
,RequestCreatedInTime INT
,RecipientName VARCHAR(500)
,Recipient_First_Action VARCHAR(500)
,Recipient_Last_Action VARCHAR(500)
,DaysSince_First_Action INT
,DaysSince_Last_Action INT
,Request_First_Action VARCHAR(500)
,DaysSince_Request_First_Action INT
,OwnerPoolsName VARCHAR(500)
,RecipientDaysToSuggested INT
,RecipientDaysToAccepted INT
,RecipientStatus VARCHAR(500)
,ResipientCreateDate DATETIME
,RecipientRespondedDate DATETIME
,RequestTimedoutDate DATETIME
,ReceivedDatetime DATETIME
)
CREATE TABLE #leadtime (
RequestOID NUMERIC(19, 0)
,ProjectPool VARCHAR(500)
,Region VARCHAR(500)
,PC VARCHAR(500)
,RequestID VARCHAR(50)
,Creator VARCHAR(500)
,CreatorsPool VARCHAR(500)
,CreateDate DATETIME
,Client VARCHAR(500)
,Project VARCHAR(500)
,Position VARCHAR(500)
,PositionOID NUMERIC(19, 0)
,FunctionalRole VARCHAR(500)
,RequestStatus VARCHAR(100)
,PositionCreated DATETIME
,Initiation DATETIME
,Completed DATETIME
,ResourceSuggested DATETIME
,StaffingAssignmentStatus VARCHAR(100)
,StaffingAssignmentResource VARCHAR(500)
,CommitmentStartDate DATETIME
,DaysToSuggested INT
,SuggestedInTime INT
,DaysToAccepted INT
,DaysToCommitment INT
,DaysToSuggestedIndicator INT
,DaysToAcceptedIndicator INT
,RequestCreatedInTime INT
,RecipientName VARCHAR(500)
,Recipient_First_Action VARCHAR(500)
,Recipient_Last_Action VARCHAR(500)
,DaysSince_First_Action INT
,DaysSince_Last_Action INT
,Request_First_Action VARCHAR(500)
,DaysSince_Request_First_Action INT
,OwnerPoolsName VARCHAR(500)
,RecipientDaysToSuggested INT
,RecipientDaysToAccepted INT
,RecipientStatus VARCHAR(500)
,ResipientCreateDate DATETIME
,RecipientRespondedDate DATETIME
,RequestTimedoutDate DATETIME
,ReceivedDatetime DATETIME
)
DECLARE @vRequestStatusAccepted VARCHAR(20)
,@vRequestStatusCancelled VARCHAR(20)
,@vRequestStatusDeclined VARCHAR(20)
,@vRequestStatusDenied VARCHAR(20)
,@vRequestStatusTimeout VARCHAR(20)
,@vRequestStatusWaitingConfirm VARCHAR(20)
,@vRequestStatusWaitingReply VARCHAR(20)
,@vRequestCreateTime INT
,@vGSRfunctionvalue VARCHAR(20)
SET @vRequestCreateTime = 28
IF @pRequestStatusAccepted = 1
SET @vRequestStatusAccepted = 'COMPLETED_ACCEPTED'
ELSE
SET @vRequestStatusAccepted = ''
IF @pRequestStatusCancelled = 1
SET @vRequestStatusCancelled = 'COMPLETED_CANCELLED'
ELSE
SET @vRequestStatusCancelled = ''
IF @pRequestStatusDeclined = 1
SET @vRequestStatusDeclined = 'COMPLETED_DECLINED'
ELSE
SET @vRequestStatusDeclined = ''
IF @pRequestStatusDenied = 1
SET @vRequestStatusDenied = 'COMPLETED_DENIED'
ELSE
SET @vRequestStatusDenied = ''
IF @pRequestStatusTimeout = 1
SET @vRequestStatusTimeout = 'COMPLETED_TIMEDOUT'
ELSE
SET @vRequestStatusTimeout = ''
IF @pRequestStatusWaitingConfirm = 1
SET @vRequestStatusWaitingConfirm = 'WAITING_FOR_CONFIRM'
ELSE
SET @vRequestStatusWaitingConfirm = ''
IF @pRequestStatusWaitingReply = 1
SET @vRequestStatusWaitingReply = 'WAITING_FOR_REPLY'
ELSE
SET @vRequestStatusWaitingReply = ''
SET @pRequestorsPool = ltrim(rtrim(@pRequestorsPool))
IF @pRequestorsPool LIKE ''
SET @pRequestorsPool = '%'
SET @pProjectPool = ltrim(rtrim(@pProjectPool))
IF @pProjectPool LIKE ''
SET @pProjectPool = '%'
SET @pPC = ltrim(rtrim(@pPC))
IF @pPC LIKE ''
SET @pPC = '%'
SET @pRegion = ltrim(rtrim(@pRegion))
CREATE CLUSTERED INDEX IX_temp_results ON #temp_results (RequestOID)
CREATE NONCLUSTERED INDEX IX_temp_results2 ON #temp_results (
RequestOID
,recipientName
) --,Region)
CREATE NONCLUSTERED INDEX IX_leadtime ON #leadtime (
RequestOID
,ProjectPool
)
CREATE NONCLUSTERED INDEX IX_results ON #results (
requestid
,projectpool
)
CREATE NONCLUSTERED INDEX IX_region ON #regiontable (
requestoid
,receiveddatetime
)
CREATE NONCLUSTERED INDEX IX_region ON #pctable (
requestoid
,recipientsPoolName
,ReceivedDatetime
)
SELECT *
INTO #StaffingRequest
FROM STAFFINGREQUEST sr WITH (NOLOCK)
WHERE sr.requestedDatetime >= @pStartDate
AND sr.requestedDatetime <= dateadd(day, 1, @pEndDate) -- add one day so that the day is included (12 am is default)
AND sr.overallstatus IN (
@vRequestStatusAccepted
,@vRequestStatusCancelled
,@vRequestStatusDeclined
,@vRequestStatusDenied
,@vRequestStatusTimeout
,@vRequestStatusWaitingConfirm
,@vRequestStatusWaitingReply
)
SELECT *
INTO #ProjectTeamSlot
FROM ProjectTeamSlot WITH (NOLOCK)
WHERE oid IN (
SELECT positionOid
FROM StaffingAssignment
WHERE Oid IN (
SELECT requestedAssignmentOid
FROM #StaffingRequest
)
)
----***** Hanamesh
SELECT Oid
,(
SELECT appidentity
FROM project
WHERE oid = projectoid
) ProjectId
,Appidentity PositionID
,NAME PositionName
,sdr_StartDate PositionStartDate
,sdr_EndDate PositionEndDate
--,' ' as CDName
--,' ' as JRName
--,isnull(CName,'NA')CName
--,isnull(CCMFlag,0) CCMFlag
,PA.OrgName OrgName
,financialRulesOid
,projectoid
INTO #ProjectPosition_JR_CD
FROM #ProjectTeamSlot PTS --(Position Details)
--LEFT OUTER JOIN rptProject_Position_JR_CD_View PJC
-- ON PTS.OID = PJC.ProjectTeamSlotOid
,(
SELECT W.Oid FinancialOid
,O.NAME OrgName
,OrgWunitOid
FROM OrganizationalWUnit O
,CommonProjectFinancials W
WHERE O.oid = W.OrgWunitOid
) PA
WHERE PA.FinancialOid = financialRulesOid
---- *** Hanamesh
ALTER TABLE #ProjectPosition_JR_CD ADD CDName VARCHAR(max)
ALTER TABLE #ProjectPosition_JR_CD ADD JRName VARCHAR(max)
CREATE TABLE #TempCD (
OID VARCHAR(19)
,CDName VARCHAR(max)
)
---- ***** CD Hanamesh ***** -----
TRUNCATE TABLE #TEMPCD
DECLARE @Cnt AS BIGINT
DECLARE @PTS_OID VARCHAR(19)
DECLARE @Name VARCHAR(max)
SET @Cnt = 9999
WHILE @cnt <> 0
BEGIN
--insert into #Temp
SELECT TOP 1 @PTS_OID = PT_S.OID
FROM assignedskill ASK
,CCMAllChild CD
,#ProjectTeamSlot PT_S
WHERE ASK.Skilloid = CD.Oid
AND ccmflag = 4
AND PT_S.Oid = ASK.EntityOwnerOid
AND PT_S.Oid NOT IN (
SELECT OID
FROM #TempCD
)
INSERT INTO #TempCD (OID)
SELECT @PTS_OID
SELECT TOP 1 @Cnt = count(PT_S.OID)
FROM assignedskill ASK
,CCMAllChild CD
,#ProjectTeamSlot PT_S
WHERE ASK.Skilloid = CD.Oid
AND ccmflag = 4
AND PT_S.Oid = ASK.EntityOwnerOid
AND PT_S.Oid NOT IN (
SELECT OID
FROM #TempCD
)
SELECT /* distinct */
@Name = replace(replace((
SELECT DISTINCT CD.NAME
FROM assignedskill ASK
,CCMAllChild CD
,#ProjectTeamSlot PT_S
WHERE ASK.Skilloid = CD.Oid
AND ccmflag = 4 --CD
AND PT_S.Oid = ASK.EntityOwnerOid
AND PT_S.Oid = @PTS_OID
FOR XML PATH('')
), '</Name>', CHAR(13)), '<Name>', '')
--print @vorgname
--select
--Print @Name
--select @Name OrgName into #result
UPDATE #TempCD
SET CDName = replace(@Name, '&', '&')
WHERE OID = @PTS_OID
--print @Cnt
IF @Cnt = 0
BREAK;
END
UPDATE #ProjectPosition_JR_CD
SET #ProjectPosition_JR_CD.CDName = TCD.CDName
FROM #TempCD TCD
WHERE TCD.OID = #ProjectPosition_JR_CD.OID
CREATE TABLE #TempJR (
OID VARCHAR(19)
,JRName NVARCHAR(max)
)
---- ***** CD Hanamesh ***** -----
TRUNCATE TABLE #TEMPJR
--Declare @Cnt as Bigint
--Declare @PTS_OID varchar(19)
--Declare @Name varchar(max)
SET @Cnt = 9999
WHILE @cnt <> 0
BEGIN
--insert into #Temp
SELECT TOP 1 @PTS_OID = PT_S.OID
FROM assignedskill ASK
,CCMAllChild JR
,#ProjectTeamSlot PT_S
WHERE ASK.Skilloid = JR.Oid
AND ccmflag = 5
AND PT_S.Oid = ASK.EntityOwnerOid
AND PT_S.Oid NOT IN (
SELECT OID
FROM #TempJR
)
INSERT INTO #TempJR (OID)
SELECT @PTS_OID
SELECT TOP 1 @Cnt = count(PT_S.OID)
FROM assignedskill ASK
,CCMAllChild JR
,#ProjectTeamSlot PT_S
WHERE ASK.Skilloid = JR.Oid
AND ccmflag = 5
AND PT_S.Oid = ASK.EntityOwnerOid
AND PT_S.Oid NOT IN (
SELECT OID
FROM #TempJR
)
SELECT /* distinct */
@Name = replace(replace((
SELECT DISTINCT JR.NAME
FROM assignedskill ASK
,CCMAllChild JR
,#ProjectTeamSlot PT_S
WHERE ASK.Skilloid = JR.Oid
AND ccmflag = 5
AND PT_S.Oid = ASK.EntityOwnerOid
AND PT_S.Oid = @PTS_OID
FOR XML PATH('')
), '</Name>', CHAR(13)), '<Name>', '')
--print @vorgname
--select
--Print @Name
--select @Name OrgName into #result
UPDATE #TempJR
SET JRName = replace(@Name, '&', '&')
WHERE OID = @PTS_OID
--print @Cnt
IF @Cnt = 0
BREAK;
END
UPDATE #ProjectPosition_JR_CD
SET #ProjectPosition_JR_CD.JRName = TJR.JRName
FROM #TempJR TJR
WHERE TJR.OID = #ProjectPosition_JR_CD.OID
INSERT INTO #results
SELECT
--ProjectId
--,PositionID
--,PositionName
--,PositionStartDate
--,CName
--,CCMFlag
--,OrgName,
sr.oid AS RequestOID
,MU.NAME AS ProjectPool
,NULL AS Region
,NULL AS PC
,sr.appidentity AS RequestID
,Requestor.personName AS Creator
,RequestorsPool.NAME AS CreatorsPool
,sr.creationDateTime AS CreateDate
,Client.NAME AS Client
,Project.NAME AS Project
,position.NAME AS Position
,position.oid AS PositionOID
,NULL AS FunctionalRole
,sr.overallstatus AS RequestStatus
,position.creationDateTime AS PositionCreated
,sr.requestedDatetime AS Initiation
,sr.completedDatetime AS Completed
,NULL AS ResourceSuggested
,CASE
WHEN (
employee.NAME IS NOT NULL
AND pc.ischangerequested = 1
)
THEN 'Change Requested'
WHEN employee.NAME IS NOT NULL
THEN 'Specific'
ELSE 'General'
END AS StaffingAssignmentStatus
,employee.NAME AS StaffingAssignmentResource
,sa.dateRange_StartDate AS CommitmentStartDate
,NULL AS DaysToSuggested
,NULL AS SuggestedInTime
,NULL AS DaysToAccepted
,NULL AS DaysToCommitment
,NULL AS DaysToSuggestedIndicator
,NULL AS DaysToAcceptedIndicator
,NULL AS RequestCreatedInTime
,Recipient.personName AS RecipientName
,ISNULL((
SELECT first_action
FROM sr_first_action(sr.oid, Recipient.oid)
), 'No Action') Recipient_First_Action
,ISNULL((
SELECT last_action
FROM sr_last_action(sr.oid, Recipient.oid)
), 'No Action') Recipient_Last_Action
,ISNULL((
SELECT DATEDIFF(day, sr.requestedDatetime, historydatetime)
FROM sr_first_action(sr.oid, Recipient.oid)
), 0) DaysSince_First_Action
,ISNULL((
SELECT DATEDIFF(day, sr.requestedDatetime, historydatetime)
FROM sr_last_action(sr.oid, Recipient.oid)
), 0) DaysSince_Last_Action
,(
SELECT first_action
FROM sr_first_action_Request(sr.oid)
) Request_First_Action
,(
SELECT DATEDIFF(day, sr.requestedDatetime, historydatetime)
FROM sr_first_action_Request(sr.oid)
) DaysSince_Request_First_Action
,pool.NAME AS OwnerPoolsName
,NULL AS RecipientDaysToSuggested
,NULL AS RecipientDaysToAccepted
,CASE srt.STATUS
WHEN 'ACCEPTED'
THEN 'Accepted'
WHEN 'APPROVED'
THEN 'Approved'
WHEN 'CANCELLED'
THEN 'Cancelled'
WHEN 'CONFIRMATION_TIMEDOUT'
THEN 'Confirmation_Timedout'
WHEN 'DECLINED'
THEN 'Declined'
WHEN 'DENIED'
THEN 'Denied'
WHEN 'REQUEST_TIMEDOUT'
THEN 'Request_Timedout'
WHEN 'REQUESTED'
THEN 'Requested'
WHEN 'SUGGESTED'
THEN 'Suggested'
END RecipientStatus
,srt.creationDateTime AS ResipientCreateDate
,srt.respondedDateTime AS RecipientRespondedDate
,sr.timedoutDateTime AS RequestTimedoutDate
,srt.ReceivedDatetime AS ReceivedDatetime
FROM #STAFFINGREQUEST sr WITH (NOLOCK)
INNER JOIN STAFFINGASSIGNMENT sa WITH (NOLOCK) ON sa.oid = sr.requestedAssignmentOID
AND sa.STATUS IN (
0
,2
,4
,6
,8
,10
) -- resource requests
INNER JOIN #ProjectTeamSlot position WITH (NOLOCK) ON sa.positionOID = position.oid
INNER JOIN PROJECT Project WITH (NOLOCK) ON Project.OID = position.ProjectOID
LEFT JOIN PROJECTCOMMITMENT pc WITH (NOLOCK) ON sa.commitmentoid = pc.oid
LEFT JOIN CLIENT Client WITH (NOLOCK) ON Project.clientOID = Client.OID
INNER JOIN POOL ProjectPool WITH (NOLOCK) ON Project.parentPoolOID = ProjectPool.OID
INNER JOIN POOL MU WITH (NOLOCK) ON ProjectPool.poolid LIKE MU.Poolid + '%'
AND MU.poollevel = 1
INNER JOIN evuser Requestor WITH (NOLOCK) ON sr.requesterOID = Requestor.oid
INNER JOIN Pool RequestorsPool WITH (NOLOCK) ON Requestor.parentPoolOID = RequestorsPool.oid
LEFT JOIN employee WITH (NOLOCK) ON sa.resourceoid = employee.oid
LEFT JOIN STAFFINGREQUESTTHREAD srt WITH (NOLOCK) ON sr.OID = srt.parentOID
LEFT JOIN StaffingRequestThreadHL srthl WITH (NOLOCK) ON srthl.StaffingRequestThreadOID = srt.oid
LEFT JOIN evuser Recipient WITH (NOLOCK) ON srt.recipientOID = Recipient.OID
LEFT JOIN OwnerEntryDLView OwnerPool WITH (NOLOCK) ON Recipient.OID = OwnerPool.entityOID
LEFT JOIN Pool pool WITH (NOLOCK) ON OwnerPool.poolID = pool.poolID
-- JOIN #ProjectPosition_JR_CD PJRC on
-- Project.oid = PJRC.projectoid
--WHERE sr.requestedDatetime >= @pStartDate
--AND sr.requestedDatetime <= dateadd(day,1,@pEndDate) -- add one day so that the day is included (12 am is default)
--AND sr.overallstatus IN (@vRequestStatusAccepted,@vRequestStatusCancelled,@vRequestStatusDeclined,@vRequestStatusDenied,@vRequestStatusTimeout,@vRequestStatusWaitingConfirm,@vRequestStatusWaitingReply)
WHERE RequestorsPool.NAME LIKE @pRequestorsPool
AND MU.NAME LIKE @pProjectPool
/*Removing Project/Opportunities Pool from the poolOwners list*/
AND pool.pooltype NOT IN (
1
,6
)
--and pool.pooltype = 2 or
--(pool.pooltype = 0 and (pool.name not like '%_Projects_%' and pool.name not like '%_Projects') )
--and (pool.pooltype = 0 and (pool.name not like '%_Opportunities_%' and pool.name not like '%_Opportunities'))
--AND MU.name not in('R&D','Request_PC Flows','Request Flows')
IF EXISTS (
SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[RRMFix1]')
AND type IN (N'U')
)
DROP TABLE [dbo].[RRMFix1]
SELECT *
INTO RRMFix1
FROM #results
/* Remove Duplicate records from #results table and loading into temp_Results*/
/* Delete Project/Opportunity Domain Pools*/
DELETE
FROM #results
WHERE OwnerPoolsName NOT LIKE '%_Project%Resources%'
AND (
OwnerPoolsName LIKE '%_Projects_%'
OR OwnerPoolsName LIKE '%_Projects'
)
OR (
OwnerPoolsName LIKE '%_Opportunities_%'
OR OwnerPoolsName LIKE '%_Opportunities'
)
INSERT INTO #temp_results
SELECT DISTINCT
--ProjectId
--,PositionID
--,PositionName
--,PositionStartDate
--,CName
--,CCMFlag
--,OrgName,
RequestOID
,ProjectPool
,Region
,PC
,RequestID
,Creator
,CreatorsPool
,CreateDate
,Client
,Project
,Position
,PositionOID
,FunctionalRole
,RequestStatus
,PositionCreated
,Initiation
,Completed
,ResourceSuggested
,StaffingAssignmentStatus
,StaffingAssignmentResource
,CommitmentStartDate
,DaysToSuggested
,SuggestedInTime
,DaysToAccepted
,DaysToCommitment
,DaysToSuggestedIndicator
,DaysToAcceptedIndicator
,RequestCreatedInTime
,RecipientName
,Recipient_First_Action
,Recipient_Last_Action
,DaysSince_First_Action
,DaysSince_Last_Action
,Request_First_Action
,DaysSince_Request_First_Action
,OwnerPoolsName
,RecipientDaysToSuggested
,RecipientDaysToAccepted
,RecipientStatus
,ResipientCreateDate
,RecipientRespondedDate
,RequestTimedoutDate
,ReceivedDatetime
FROM #results
--select * into RRMFix1 from #temp_results
INSERT INTO #regiontable (
requestoid
,ReceivedDatetime
,Region
,recipientName
)
SELECT srt.parentoid AS RequestOID
,srt.receivedDatetime AS ReceivedDatetime
,CASE
WHEN (
SELECT NAME
FROM pool
WHERE oid = recipient.parentpooloid
) = 'Request Flows'
THEN (
SELECT rtrim(ltrim(substring(PERSONNAME, charindex(',', PERSONNAME) + 1, len(PERSONNAME))))
FROM evuser
WHERE oid = srt.recipientoid
)
ELSE (
SELECT NAME
FROM pool
WHERE oid = recipient.parentpooloid
)
END AS Region
,recipient.personName AS recipientName
FROM STAFFINGREQUESTTHREAD srt WITH (NOLOCK)
INNER JOIN evuser recipient WITH (NOLOCK) ON recipient.oid = srt.recipientOID
INNER JOIN #STAFFINGREQUEST sr WITH (NOLOCK) ON sr.OID = srt.parentOID
WHERE sr.requestedDatetime >= @pStartDate
AND sr.requestedDatetime <= dateadd(day, 1, @pEndDate)
UPDATE #temp_results
SET Region = d.Region
FROM #temp_results r
INNER JOIN #regiontable d ON r.RequestOID = d.RequestOID
AND r.recipientName = d.RecipientName
/*Added by Gopi Krishna Namana for displaying results when the requests sent from Region to GSRR Function Inbox on 20111115'*/
UPDATE #temp_results
SET Region = 'GSRR Function'
WHERE Region IN (
'Americas'
,'APAC'
,'EMEA'
)
/*update #temp_results
set Region = d.Region
from
#temp_results r
join [PVC_DateRequestReceivedByRegion] d
on r.RequestOID = d.RequestOID and r.recipientName=d.RecipientName */
IF (@pinternalRegion = 1)
BEGIN
INSERT INTO #internal
SELECT DISTINCT t.requestoid
FROM #temp_results t
INNER JOIN PVC_DateRequestReceivedByRegion a ON t.requestoid = a.requestoid
AND a.region <> t.region
END
IF (@pinternalRegion = 0)
BEGIN
DELETE
FROM #temp_results
WHERE Region NOT LIKE '%' + @pRegion + '%'
END
INSERT INTO #pctable (
requestoid
,ReceivedDatetime
,personname
,recipientsPoolName
,inbox
)
SELECT srt.parentoid AS RequestOID
,srt.receivedDatetime AS ReceivedDatetime
,(
SELECT personname
FROM evuser
WHERE oid = poolownerentryRecipient.useroid
) personname
,recipientsPool.NAME recipientsPoolName
,CASE
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Radio Access Networks'
THEN 'RAN'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Media and Applications'
THEN 'MA'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Consulting'
THEN 'CON'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Customer Support'
THEN 'CS'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Education Center'
THEN 'ED'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Engagement Practices'
THEN 'EP'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'IP&BB and Core'
THEN 'IPBB'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Local Delivery'
THEN 'LD'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'TP&I'
THEN 'TPI'
WHEN (recipient.personname LIKE 'Global%')
THEN rtrim(ltrim(substring(recipient.personname, charindex(',', recipient.personname) + 1, len(recipient.personname))))
ELSE substring(recipient.personname, 0, charindex(',', recipient.personname))
END Inbox
FROM STAFFINGREQUESTTHREAD(NOLOCK) srt
INNER JOIN evuser(NOLOCK) recipient ON recipient.oid = srt.recipientOID
INNER JOIN poolownerentry(NOLOCK) poolownerentryRecipient ON recipient.oid = poolownerentryRecipient.userOID
INNER JOIN Pool(NOLOCK) recipientsPool ON poolownerentryRecipient.poolOID = recipientsPool.oid
INNER JOIN STAFFINGREQUEST sr WITH (NOLOCK) ON sr.OID = srt.parentOID
INNER JOIN PVC_PrimaryCenter_GSR(NOLOCK) GSR ON GSR.PrimaryCenterName = CASE
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Radio Access Networks'
THEN 'RAN'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Media and Applications'
THEN 'MA'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Consulting'
THEN 'CON'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Customer Support'
THEN 'CS'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Education Center'
THEN 'ED'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Engagement Practices'
THEN 'EP'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'IP&BB and Core'
THEN 'IPBB'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'Local Delivery'
THEN 'LD'
WHEN substring(recipient.personname, 0, charindex(',', recipient.personname)) = 'TP&I'
THEN 'TPI'
WHEN (recipient.personname LIKE 'Global%')
THEN rtrim(ltrim(substring(recipient.personname, charindex(',', recipient.personname) + 1, len(recipient.personname))))
ELSE substring(recipient.personname, 0, charindex(',', recipient.personname))
END
WHERE sr.requestedDatetime >= @pStartDate
AND sr.requestedDatetime <= dateadd(day, 1, @pEndDate)
UPDATE #temp_results
SET PC = d.Inbox
FROM #temp_results r
INNER JOIN #pctable d ON r.RequestOID = d.RequestOID
AND r.Ownerpoolsname = d.RecipientspoolName
AND r.ReceivedDatetime = d.ReceivedDatetime
/*update #temp_results
set PC = d.Inbox
from
#temp_results r
join [PVC_DateRequestReceivedByGSR] d
on r.RequestOID = d.RequestOID
and r.Ownerpoolsname=d.RecipientspoolName
and r.ReceivedDatetime = d.ReceivedDatetime */
/*
END V 1.1
--*/
UPDATE #temp_results
SET PC = isnull(PC, 'Internal LM')
,Region = isnull(Region, 'Missing Recipient')
/*Commented on 20111115
update #temp_results
set Region = 'GSR Function' where Region in ('Americas','APAC','EMEA')*/
DELETE
FROM #temp_results
WHERE PC NOT LIKE @pPC + '%'
UPDATE #temp_results
SET ResourceSuggested = x.historyDatetime
FROM #temp_results r
INNER JOIN (
SELECT srtsuggested.parentOID
,min(suggested.historyDatetime) AS historyDatetime
FROM STAFFINGREQUESTTHREAD srtsuggested
INNER JOIN STAFFINGREQUESTTHREADHL suggested ON suggested.staffingRequestThreadOID = srtsuggested.oid
--where actionType = 'SUGGESTED'
--Jayaraj Arulandu 11/1/09 Fix for ST0000007262668
WHERE actionType IN ('SUGGESTED')
GROUP BY srtsuggested.parentOID
) x ON x.parentOID = r.RequestOID
WHERE StaffingAssignmentStatus <> 'Specific'
-- added by Jayaraj for specific requests
UPDATE #temp_results
SET ResourceSuggested = x.historyDatetime
FROM #temp_results r
INNER JOIN (
SELECT srtsuggested.parentOID
,min(suggested.historyDatetime) AS historyDatetime
FROM STAFFINGREQUESTTHREAD srtsuggested
INNER JOIN STAFFINGREQUESTTHREADHL suggested ON suggested.staffingRequestThreadOID = srtsuggested.oid
--where actionType = 'SUGGESTED'
--Jayaraj Arulandu 11/1/09 Fix for ST0000007262668
WHERE actionType IN (
'SUGGESTED'
,'APPROVED'
)
GROUP BY srtsuggested.parentOID
) x ON x.parentOID = r.RequestOID
WHERE StaffingAssignmentStatus = 'Specific'
UPDATE #temp_results
SET FunctionalRole = skill.NAME
FROM #temp_results r
INNER JOIN PROJECTTEAMSLOT position ON r.PositionOID = position.oid
INNER JOIN ASSIGNEDSKILL ON ASSIGNEDSKILL.entityOwnerOID = position.oid
INNER JOIN SKILL ON ASSIGNEDSKILL.skillOID = SKILL.oid
AND skill.NAME LIKE 'FR-%'
UPDATE #temp_results
SET RequestStatus = CASE RequestStatus
WHEN 'COMPLETED_DENIED'
THEN 'Completed, Denied'
WHEN 'COMPLETED_CANCELLED'
THEN 'Completed, Cancelled'
WHEN 'COMPLETED_DECLINED'
THEN 'Completed, Declined'
WHEN 'COMPLETED_TIMEDOUT'
THEN 'Completed, TimedOut'
WHEN 'WAITING_FOR_CONFIRM'
THEN 'Waiting for Confirm'
WHEN 'COMPLETED_ACCEPTED'
THEN 'Completed, Accepted'
WHEN 'WAITING_FOR_REPLY'
THEN 'Waiting for Reply'
END
-- there is a known bug that sometimes the completedDatetime is not set for timed out requests
-- so this corrects for that bug for this report
UPDATE #temp_results
SET Completed = a.timeoutdate
FROM #temp_results r
INNER JOIN (
SELECT sr.oid
,min(hl.historydatetime) AS timeoutdate
FROM staffingrequest sr
INNER JOIN staffingrequesthl hl ON hl.staffingrequestoid = sr.oid
AND hl.actiontype LIKE 'COMPLETED_TIMEDOUT'
WHERE sr.overallstatus LIKE 'COMPLETED_TIMEDOUT'
AND sr.completeddatetime IS NULL
GROUP BY sr.oid
) a ON a.oid = r.RequestOID
WHERE Completed IS NULL
AND RequestStatus = 'Completed, TimedOut'
UPDATE #temp_results
SET DaysToCommitment = DATEDIFF(day, Initiation, CommitmentStartDate)
--"Clock should stop when either of this occurs: --1) When first recipient suggests a resource --2) When first recipient approves a resource --3) When the request is cancelled --4) When the request times out"
--5) When the request is accepted
--6) When the sender suggests a resource
--7) When the sender approves a resource
UPDATE #temp_results
SET DaysToSuggested = CASE
WHEN RequestStatus IN ('Completed, TimedOut')
THEN DATEDIFF(day, Initiation, RequestTimedoutDate)
WHEN RequestStatus IN (
'Completed, Accepted'
,'Completed, Cancelled'
)
THEN DATEDIFF(day, Initiation, Completed)
ELSE DATEDIFF(day, Initiation, getdate())
END
-- When First Recipient Suggests a Resource or Approves a Resource
UPDATE #temp_results
SET DaysToSuggested = tmp.dts
,DaysToSuggestedIndicator = 1
FROM (
SELECT requestid
,(
CASE
WHEN Request_First_Action IN (
'SUGGESTED'
,'APPROVED'
)
THEN DaysSince_Request_First_Action
END
) dts
FROM #temp_results
WHERE (
Request_First_Action IN (
'SUGGESTED'
,'APPROVED'
)
)
--group by requestid
) tmp
WHERE #temp_results.requestid = tmp.requestid
--update results1
--set SuggestedInTime =
-- case
-- when isnull(ResourceSuggested, -1) = -1 then 0
-- when DaysToSuggested <= 7 then 1
-- else 0
-- end
--update results1
--set DaysToSuggestedIndicator =
-- case
-- when isnull(ResourceSuggested, -1) = -1 then 0 -- else 1
-- end
--"Clock should stop when either of this occurs: --1) When the requests is accepted --2) When the request is cancelled --3) When request times out"
UPDATE #temp_results
SET DaysToAccepted =
-- case isnull(Completed, -1)
-- when -1 then DATEDIFF(day, Initiation, getdate())
-- else DATEDIFF(day, Initiation, Completed)
-- end
CASE -- added by jayaraj with requirement for accepted.
WHEN RequestStatus = 'Completed, Accepted'
OR RequestStatus = 'Completed, Cancelled'
THEN DATEDIFF(day, Initiation, Completed)
--when RequestStatus ='Completed, Cancelled'
WHEN RequestStatus = 'Completed, TimedOut'
THEN DATEDIFF(day, Initiation, RequestTimedoutDate)
ELSE DATEDIFF(day, Initiation, getdate())
END
UPDATE #temp_results
SET DaysToAcceptedIndicator = CASE
--when isnull(Completed, -1) = -1 then 0
WHEN RequestStatus LIKE 'Completed, Accepted'
THEN 1
ELSE 0
END
--update temp_results
--set RequestCreatedInTime =
-- case
-- when DaysToCommitment >= @vRequestCreateTime then 1
-- else 0
-- end
--FROM
-- (select requestid,region,
-- from temp_results
-- --group by requestid
-- ) tmp
--join PVC_PrimaryCenter_GSR GSR
--on GSR.PrimaryCenterName= substring((select personname from evuser where oid = poolownerentryRecipient.useroid),0,
-- charindex(',',(select personname from evuser where oid = poolownerentryRecipient.useroid)))
--where temp_results.requestid=tmp.requestid and temp_results.[region]=tmp.[region]
--and temp_results.ownerpoolsname is not null and
/* Distinct Values into Temp_leadtime table*/
INSERT INTO #leadtime (
RequestOID
,ProjectPool
,Region
,PC
,RequestID
,Creator
,CreatorsPool
,CreateDate
,Client
,Project
,Position
,PositionOID
,FunctionalRole
,RequestStatus
,PositionCreated
,Initiation
,Completed
,ResourceSuggested
,StaffingAssignmentStatus
,StaffingAssignmentResource
,CommitmentStartDate
,DaysToSuggested
,SuggestedInTime
,DaysToAccepted
,DaysToCommitment
,DaysToSuggestedIndicator
,DaysToAcceptedIndicator
,RequestCreatedInTime
,RecipientName
,Recipient_First_Action
,Recipient_Last_Action
,DaysSince_First_Action
,DaysSince_Last_Action
,Request_First_Action
,DaysSince_Request_First_Action
,OwnerPoolsName
,RecipientDaysToSuggested
,RecipientDaysToAccepted
,RecipientStatus
,ResipientCreateDate
,RecipientRespondedDate
,RequestTimedoutDate
,ReceivedDatetime
)
SELECT DISTINCT RequestOID
,ProjectPool
,Region
,PC
,RequestID
,Creator
,CreatorsPool
,CreateDate
,Client
,Project
,Position
,PositionOID
,FunctionalRole
,RequestStatus
,PositionCreated
,Initiation
,Completed
,ResourceSuggested
,StaffingAssignmentStatus
,StaffingAssignmentResource
,CommitmentStartDate
,DaysToSuggested
,SuggestedInTime
,DaysToAccepted
,DaysToCommitment
,DaysToSuggestedIndicator
,DaysToAcceptedIndicator
,RequestCreatedInTime
,RecipientName
,Recipient_First_Action
,Recipient_Last_Action
,DaysSince_First_Action
,DaysSince_Last_Action
,Request_First_Action
,DaysSince_Request_First_Action
,NULL
,RecipientDaysToSuggested
,RecipientDaysToAccepted
,RecipientStatus
,ResipientCreateDate
,RecipientRespondedDate
,RequestTimedoutDate
,ReceivedDatetime
FROM #temp_results
UPDATE #leadtime
SET #leadtime.OwnerPoolsName = #temp_results.OwnerPoolsName
FROM #leadtime
INNER JOIN #temp_results ON #temp_results.RequestOID = #leadtime.RequestOID
AND #temp_results.ProjectPool = #leadtime.ProjectPool
AND #temp_results.Region = #leadtime.Region
AND #temp_results.PC = #leadtime.PC
--
--select * into rrm_tempresult from #temp_results
--select * into rrm_leadtime from #leadtime
UPDATE #temp_results
SET RequestCreatedInTime = CASE
WHEN #temp_results.DaysToCommitment >= @vRequestCreateTime
THEN 1
--and temp_results.region=rtrim(substring(temp_results.ownerpoolsname,1,charindex('_',temp_results.ownerpoolsname)-1))
ELSE 0
END
FROM #leadtime
INNER JOIN #temp_results ON #temp_results.RequestOID = #leadtime.RequestOID
AND #temp_results.ProjectPool = #leadtime.ProjectPool
AND #temp_results.Region = #leadtime.Region
AND #temp_results.PC = #leadtime.PC
--and #temp_results.OwnerPoolsName=#leadtime.OwnerPoolsName /* change done on 27-10-2010 debasis*/
--where #temp_results.OwnerPoolsName is not null /* change done on 27-10-2010 debasis*/
UPDATE #temp_results
SET RecipientDaysToSuggested = CASE
WHEN RequestStatus = 'Completed, Accepted'
OR RequestStatus = 'Completed, Cancelled'
THEN DATEDIFF(day, Initiation, Completed)
WHEN RecipientStatus IN ('Request_Timedout')
THEN --ADDED
DATEDIFF(day, Initiation, RequestTimedoutDate) --ADDED
WHEN RequestStatus = 'Completed, TimedOut'
THEN DATEDIFF(day, Initiation, RequestTimedoutDate)
ELSE DATEDIFF(day, Initiation, getdate())
END
UPDATE #temp_results
SET RecipientDaysToSuggested = tmp.dts
,SuggestedInTime = DaysSince_First_Action --1 --- RecipientDaysToSuggestedIndicator
FROM (
SELECT requestoid
,recipientname
,ProjectPool
,Region
,PC
,CASE
WHEN Recipient_First_Action IN (
'SUGGESTED'
,'APPROVED'
,'FORWARDED'
)
THEN DaysSince_First_Action
WHEN Recipient_Last_Action IN (
'SUGGESTED'
,'APPROVED'
,'FORWARDED'
)
THEN DaysSince_Last_Action
END dts
FROM #temp_results
WHERE (
Recipient_First_Action IN (
'SUGGESTED'
,'APPROVED'
,'FORWARDED'
)
OR Recipient_Last_Action IN (
'SUGGESTED'
,'APPROVED'
,'FORWARDED'
)
)
GROUP BY recipientname
,requestoid
,recipientstatus
,Recipient_First_Action
,Recipient_Last_Action
,DaysSince_First_Action
,DaysSince_Last_Action
,ProjectPool
,Region
,PC
) tmp
WHERE #temp_results.requestoid = tmp.requestoid
AND #temp_results.ProjectPool = tmp.ProjectPool
AND #temp_results.Region = tmp.Region
AND #temp_results.PC = tmp.PC
AND #temp_results.recipientname = tmp.recipientname
--and #temp_results.ownerpoolsname is not null /* change done on 27-10-2010 debasis*/
UPDATE #temp_results
SET RecipientDaysToAccepted = CASE
WHEN RequestStatus = 'Completed, Accepted'
THEN DATEDIFF(day, Initiation, Completed)
WHEN RequestStatus != 'Completed, Accepted'
THEN DATEDIFF(day, Initiation, getdate())
WHEN RequestStatus = 'Completed, TimedOut'
THEN DATEDIFF(day, Initiation, RequestTimedoutDate)
ELSE 0
END
TRUNCATE TABLE #results
INSERT INTO #results
SELECT *
FROM #temp_results
--delete from #results where OwnerPoolsName is null and Region <> 'Missing Recipient'
UPDATE #results
SET OwnerPoolsName = 'Pool not available'
WHERE OwnerPoolsName IS NULL
INSERT INTO StatusReader
VALUES ('Insert @pinternalRegion=1')
IF (@pinternalRegion = 1)
BEGIN
DELETE #results
FROM #results
INNER JOIN #internal ON #results.requestoid = #internal.requestoid
END
TRUNCATE TABLE TempRRMResults
INSERT INTO TempRRMResults
SELECT *
FROM #results
--select * into TempRRMResults from #results
IF (
SELECT count(1)
FROM rrmfix1
) = 0
BEGIN
SELECT '0' AS ProjectId
,'-' AS PositionID
,'-' AS PositionName
,getdate() AS PositionStartDate
,'NA' AS CDName
,'NA' AS JRName
,'-' AS OrgName
,
--0 as RequestOID,
'-' AS ProjectPool
,'-' AS Region
,'-' AS PC
,'' AS RequestID
,'No qualifing data returned.' AS Creator
,'' AS CreatorsPool
,getdate() AS CreateDate
,'' AS Client
,'' AS Project
,'' AS Position
,0 AS PositionOID
,'' AS FunctionalRole
,'' AS RequestStatus
,getdate() AS Initiation
,getdate() AS Completed
,getdate() AS ResourceSuggested
,'' AS StaffingAssignmentStatus
,'' AS StaffingAssignmentResource
,getdate() AS CommitmentStartDate
,0 AS DaysToSuggested
,0 AS SuggestedInTime
,0 AS DaysToAccepted
,0 AS DaysToCommitment
,0 AS DaysToSuggestedIndicator
,0 AS DaysToAcceptedIndicator
,0 AS RequestCreatedInTime
,'' AS RecipientName
,'' AS Recipient_First_Action
,'' AS Recipient_Last_Action
,0 AS DaysSince_First_Action
,0 AS DaysSince_Last_Action
,'' AS OwnerPoolsName
,0 AS RecipientDaysToSuggested
,0 AS RecipientDaysToAccepted
,'' AS RecipientStatus
,getdate() AS ResipientCreateDate
,getdate() AS RecipientRespondedDate
,getdate() AS RequestTimedoutDate
,'-' AS PCR
,getdate() AS ReceivedDatetime
END
IF (@pinternalRegion = 1)
BEGIN
IF EXISTS (
SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[ABC]')
AND type IN (N'U')
)
DROP TABLE [dbo].[ABC]
SELECT *
INTO ABC
FROM #ProjectPosition_JR_CD
SELECT DISTINCT rs.ProjectId
,rs.PositionID
,rs.PositionName
,rs.PositionStartDate
,rs.CDName
,rs.JRName
,rs.OrgName OrgName
,r.ProjectPool
,
--ProjectPool,
r.Region
,r.PC
,r.RequestID
,r.Creator
,r.CreatorsPool
,r.CreateDate
,r.Client
,r.Project
,r.Position
,r.PositionOID
,r.FunctionalRole
,r.RequestStatus
,r.Initiation
,r.Completed
,r.ResourceSuggested
,r.StaffingAssignmentStatus
,r.StaffingAssignmentResource
,r.CommitmentStartDate
,r.DaysToSuggested
,r.SuggestedInTime
,r.DaysToAccepted
,r.DaysToCommitment
,r.DaysToSuggestedIndicator
,r.DaysToAcceptedIndicator
,r.RequestCreatedInTime
,r.RecipientName
,r.Recipient_First_Action
,r.Recipient_Last_Action
,r.DaysSince_First_Action
,r.DaysSince_Last_Action
,ISNULL(r.OwnerPoolsName, '') AS OwnerPoolsName
,r.RecipientDaysToSuggested
,r.RecipientDaysToAccepted
,r.RecipientStatus
,r.ResipientCreateDate
,r.RecipientRespondedDate
,r.RequestTimedoutDate
,upper(r.pc) AS PCR
,r.ReceivedDateTime
-- into #rrm_temp
FROM #results r
LEFT JOIN (
SELECT *
FROM #ProjectPosition_JR_CD
) rs ON r.positionoid = rs.oid
WHERE r.Region = @pProjectPool
---- select distinct
---- rs.ProjectId
---- ,rs.PositionID
---- ,rs.PositionName
---- ,rs.PositionStartDate
---- ,rs.CDName
---- ,rs.JRName
---- ,rs.OrgName OrgName,
---- r.*
---- from #rrm_temp r left outer join (select * from #ProjectPosition_JR_CD) rs
---- ON r.positionoid = rs.oid
----select distinct
---- rs.ProjectId
---- ,rs.PositionID
---- ,rs.PositionName
---- ,rs.PositionStartDate
---- ,rs.CDName
---- ,rs.JRName
---- ,rs.OrgName OrgName,
----
---- r.ProjectPool ,
---- --ProjectPool,
---- r.Region,
---- r.PC,
---- r.RequestID,
---- r.Creator,
---- r.CreatorsPool,
---- r.CreateDate,
---- r.Client,
---- r.Project,
---- r.Position,
---- r.PositionOID,
---- r.FunctionalRole,
---- r.RequestStatus,
---- r.Initiation,
---- r.Completed,
---- r.ResourceSuggested,
---- r.StaffingAssignmentStatus,
---- r.StaffingAssignmentResource,
---- r.CommitmentStartDate,
---- r.DaysToSuggested, r.SuggestedInTime,
---- r.DaysToAccepted,
---- r.DaysToCommitment,
---- r.DaysToSuggestedIndicator,
---- r.DaysToAcceptedIndicator,
---- r.RequestCreatedInTime,
---- r.RecipientName,
---- r.Recipient_First_Action ,
---- r.Recipient_Last_Action ,
---- r.DaysSince_First_Action ,
---- r.DaysSince_Last_Action ,
---- ISNULL(r.OwnerPoolsName, '') as OwnerPoolsName,
---- r.RecipientDaysToSuggested,
---- r.RecipientDaysToAccepted,
---- r.RecipientStatus,
---- r.ResipientCreateDate,
---- r.RecipientRespondedDate,
---- r.RequestTimedoutDate ,
---- upper(r.pc) as PCR,
---- r.ReceivedDateTime
------ into #rrm_temp
---- from #results r left outer join (select * from #ProjectPosition_JR_CD) rs
---- ON rs.oid = r.positionoid
---- Where r.Region=@pProjectPool
END
ELSE
BEGIN
SELECT DISTINCT r.ProjectId
,r.PositionID
,r.PositionName
,r.PositionStartDate
,r.CDName
,r.JRName
,r.OrgName OrgName
,
--ProjectPool as
ProjectPool
,Region
,PC
,RequestID
,Creator
,CreatorsPool
,CreateDate
,Client
,Project
,Position
,PositionOID
,FunctionalRole
,RequestStatus
,Initiation
,Completed
,ResourceSuggested
,StaffingAssignmentStatus
,StaffingAssignmentResource
,CommitmentStartDate
,DaysToSuggested
,SuggestedInTime
,DaysToAccepted
,DaysToCommitment
,DaysToSuggestedIndicator
,DaysToAcceptedIndicator
,RequestCreatedInTime
,RecipientName
,Recipient_First_Action
,Recipient_Last_Action
,DaysSince_First_Action
,DaysSince_Last_Action
,ISNULL(OwnerPoolsName, '') AS OwnerPoolsName
,RecipientDaysToSuggested
,RecipientDaysToAccepted
,RecipientStatus
,ResipientCreateDate
,RecipientRespondedDate
,RequestTimedoutDate
,upper(pc) AS PCR
,ReceivedDatetime
--into rrm_Temp
FROM #results
LEFT JOIN (
SELECT *
FROM #ProjectPosition_JR_CD
) r ON positionoid = r.oid -- AND (r.ccmflag=0 OR r.ccmflag=4)
------ UNION ALL
END
--select * from #rrm_temp
END -- proc
--select * into RptRegionRequestMeasurementsTempResults from #results
DROP TABLE #temp_results
DROP TABLE #leadtime
DROP TABLE #regiontable
DROP TABLE #PCtable
DROP TABLE #ProjectPosition_JR_CD
DROP TABLE #ProjectTeamSlot
DROP TABLE #StaffingRequest
SET NOCOUNT OFF
--select * from RptRegionRequestMeasurementsTempResults
--where requestid = 524441
----
OK so now we have code that is at least legible. The problem here is that you posted a stored proc with over 1600 lines and expect somebody to come along and make this fast. I don't mean in any way to sound negative but you need a lot more help than can be provided by an online forum. You need to hire a professional to come on site and help sort this out. There are so many issues with this code.
Why do you need to truncate temp tables immediately after creating them?
You have lots of looping and very inefficient code. To properly tune this query I would quote a client that it would take 2-3 weeks at a minimum. There are dozens of tables and functions in here.
Why all the NOLOCK hints? Are you familiar with the issues that hint brings to the table? I have a feeling that hint was thrown in here to make it faster without understanding the pitfalls.
You have setup this process with multiple execution paths so that no matter the tuning this will continue to perform poorly because the execution plan will need to be different for each execution.
_______________________________________________________________
Need help? Help us help you.
Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.
Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/