2011-01-21 4 views
0

아래 proc의 결과 집합에 SRS 시작 날짜 필드를 추가하려고하는 SQL proc가 있습니다. SRS_StartDate 필드를 추가하고 싶습니다. 필드는 다음과 같이 정의해야합니다 : coalesce(projectMilestone.startDate, releaseschedual.startDate) as SRS_StartDate - CID = 37에 대해서만 SRS에 대한 cid입니다.내 SQL proc 결과에 필드를 추가하는 데 도움이

내 현재 proc 및 a file of table structure and data as well에 아래 샘플 코드를 첨부하고 있습니다.

엑셀 파일에 지원되는 데이터가 있으므로이 프로젝트 ID로 테스트 할 수 있습니다. 새로운 라인 구문 오류가

exec rainbows '66,97,25' --testing 



create PROC rainbows 
    @ProjectIDs NVARCHAR(1000)  
AS  

DECLARE @ProjIDs TABLE (id INT)  
INSERT @ProjIDs SELECT DISTINCT value FROM fn_Split(@ProjectIDs, ',')  

--get core data set 
SELECT t1.ProjectID,t1.ProjectName, 
     case sco.CID when 37 then 'BRS Start' 
        when 37 then 'BRS end' 
        when 39 then 'SRS' 
        when 41 then 'SAD' 
        when 45 then 'Product Profile Review' 
        when 47 then 'SE Integration' 
        when 50 then 'IDE' 
        when 53 then 'UAT' 
        when 72 then 'PE Testing' 
        when 73 then 'Code Freeze' 
        when 75 then 'Dark Pod' 
        when 77 then 'Production' end CID, 
     coalesce(t2.EndDate, t1.EndDate) MilestoneEndDate 
INTO #DATA  
FROM StatusCode sco  
     LEFT OUTER JOIN  
      (SELECT p.ProjectId,p.ProjectName,sc.CID,rs.EndDate 
       FROM StatusCode sc  
      INNER JOIN ReleaseSchedule rs ON sc.CID = rs.MilestoneCID  
      INNER JOIN Project p ON rs.ReleaseID = p.ReleaseID 
      INNER JOIN @ProjIDs pList ON p.ProjectId = pList.id 
      ) AS t1 ON sco.CID = t1.CID  
     LEFT OUTER JOIN  
      (SELECT sc.CID, pm.EndDate 
       FROM StatusCode sc  
      INNER JOIN ProjectMilestone pm ON sc.CID = pm.MilestoneCID 
      INNER JOIN @ProjIDs pList ON pm.ProjectId = pList.id 
      ) AS t2 ON sco.CID = t2.CID 
WHERE sco.CID IN (37, 39, 41, 45, 47, 50, 53, 72, 73, 75, 77)  

select ProjectID,ProjectName,[BRS start],[BRS Start] [BRS end],[SRS],[SAD],[Product Profile Review],[SE Integration],[IDE],[UAT], 
             [PE Testing],[Code Freeze],[Dark Pod],[Production] 
from (
SELECT * FROM #DATA 
PIVOT (MAX(MilestoneEndDate) FOR CID IN ([BRS start],[BRS end],[SRS],[SAD],[Product Profile Review],[SE Integration],[IDE],[UAT], 
             [PE Testing],[Code Freeze],[Dark Pod],[Production] 
)) AS P) t1 

답변

1
create PROC rainbows 
    @ProjectIDs NVARCHAR(1000)  
AS  

DECLARE @ProjIDs TABLE (id INT)  
INSERT @ProjIDs SELECT DISTINCT value FROM fn_Split(@ProjectIDs, ',')  

--get core data set 
SELECT t1.ProjectID,t1.ProjectName, 
     case sco.CID when 37 then 'BRS Start' 
        when 37 then 'BRS end' 
        when 39 then 'SRS' 
        when 41 then 'SAD' 
        when 45 then 'Product Profile Review' 
        when 47 then 'SE Integration' 
        when 50 then 'IDE' 
        when 53 then 'UAT' 
        when 72 then 'PE Testing' 
        when 73 then 'Code Freeze' 
        when 75 then 'Dark Pod' 
        when 77 then 'Production' end CID, 
     coalesce(t2.EndDate, t1.EndDate) MilestoneEndDate , 
     CASE WHEN sco.CID=37 then coalesce(t2.startDate, t1.startDate) else null as SRS_StartDate 
INTO #DATA  
FROM StatusCode sco  
     LEFT OUTER JOIN  
      (SELECT p.ProjectId,p.ProjectName,sc.CID,rs.EndDate, rs.startDate 
       FROM StatusCode sc  
      INNER JOIN ReleaseSchedule rs ON sc.CID = rs.MilestoneCID  
      INNER JOIN Project p ON rs.ReleaseID = p.ReleaseID 
      INNER JOIN @ProjIDs pList ON p.ProjectId = pList.id 
      ) AS t1 ON sco.CID = t1.CID  
     LEFT OUTER JOIN  
      (SELECT sc.CID, pm.EndDate, pm.startDate 
       FROM StatusCode sc  
      INNER JOIN ProjectMilestone pm ON sc.CID = pm.MilestoneCID 
      INNER JOIN @ProjIDs pList ON pm.ProjectId = pList.id 
      ) AS t2 ON sco.CID = t2.CID 
WHERE sco.CID IN (37, 39, 41, 45, 47, 50, 53, 72, 73, 75, 77)  

select ProjectID,ProjectName,SRS_StartDate,[BRS start],[BRS Start] [BRS end],[SRS],[SAD],[Product Profile Review],[SE Integration],[IDE],[UAT], 
             [PE Testing],[Code Freeze],[Dark Pod],[Production] 
from (
SELECT * FROM #DATA 
PIVOT (MAX(MilestoneEndDate) FOR CID IN ([BRS start],[BRS end],[SRS],[SAD],[Product Profile Review],[SE Integration],[IDE],[UAT], 
             [PE Testing],[Code Freeze],[Dark Pod],[Production] 
)) AS P) t1 
+0

IM : CASE sco.CID = 37이 다음 (t2.startDate, t1.startDate)도 SRS_StartDate – kacalapy

+0

같은 다른 널 유착 결과 집합하지 않는 각 projectId에 속한 데이터를 반환합니다. 모든 이정표 종료 날짜는 dups입니다. projectid = 25 int의 날짜는 나머지 데이터와 다르지만 proc의 결과는 모든 날짜가 동일합니다. – kacalapy

관련 문제