2011-01-21 91 views
0

我有SQL proc下面,我试图将SRS开始日期字段添加到下面的proc的结果集。我想为SRS_StartDate添加一个字段。该字段应该被定义为:coalesce(projectMilestone.startDate, releaseschedual.startDate) as SRS_StartDate - 但仅适用于CID = 37,因为这是SRS的cid帮助添加一个字段到我的SQL PROC结果

我附上我的示例sql代码,下面是我当前的proc和a file of table structure and data as well

您可以使用这些projectIDs进行测试,因为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
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

即时得到上新行的语法错误:CASE WHEN sco.CID = 37然后聚结(t2.startDate,t1.startDate)否则null作为SRS_StartDate – kacalapy 2011-01-24 14:52:48