我有下面的SQL proc,我试图将SRS开始日期字段添加到下面的proc的结果集中。我想为SRS_StartDate添加一个字段。该字段应定义为:coalesce(projectMilestone.startDate, releaseschedual.startDate) as SRS_StartDate
- 但仅适用于CID = 37,因为这是SRS的cid
我将下面的示例sql代码附加到我当前的proc和a file of table structure and data as well。
您可以使用这些projectID进行测试,因为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
答案 0 :(得分: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