помогите добавить поле к моему результату sql proc - PullRequest
0 голосов
/ 21 января 2011

У меня SQL-процесс ниже, и я пытаюсь добавить поле даты начала SRS в результирующий набор процесса ниже.Я хочу добавить поле для SRS_StartDate.Поле должно быть определено следующим образом: coalesce(projectMilestone.startDate, releaseschedual.startDate) as SRS_StartDate - но только для CID = 37, так как это cid для SRS

Я прилагаю нижеприведенный пример кода sql для моего текущего proc и файл сструктуру таблицы и данные .

вы можете протестировать с этими идентификаторами проекта, так как в файле Excel есть данные для их поддержки.

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 Ответ

1 голос
/ 22 января 2011
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
...