2011-01-21 14 views
0

私は以下のprocの結果セットにSRSの開始日フィールドを追加しようとしています。 SRS_StartDateのフィールドを追加したいと思います。フィールドは次のように定義する必要があります:coalesce(projectMilestone.startDate, releaseschedual.startDate) as SRS_StartDate - これはSRSのCIDであるためCID = 37の場合のみSQLプロシージャの結果にフィールドを追加するのに役立ちます

私の現在のprocとa file of table structure and data as wellの下にサンプルのsqlコードを付けます。

これらのプロジェクトIDを使って、Excelファイルにサポートするデータがあるため、これらのプロジェクト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

イム:CASE sco.CIDは= 37は、その後(t2.startDate、t1.startDate)もSRS_StartDate – kacalapy

+0

として他のヌルを合体し、結果セットにはありませんそれぞれのprojectIdに関連するデータを返します。すべてのマイルストーンの終了日はダブです。 projectid = 25 intの日付は残りのデータとは異なりますが、procの結果はすべての日付が同じになります。 – kacalapy

関連する問題