2014-10-30 71 views
-1

我已查看其他對此問題的答覆,但找不到適合我情況的相應答覆。我試圖用「估計時間」來劃分「實際時間」。但是,估計的小時數可能爲空(無條目)或零。實際的小時數可以爲零。所以,當我看到部門聲明時,我估計小時無效或實際小時數爲零。我的「合併」聲明似乎沒有幫助。任何意見將是有益的。正在獲取錯誤:消息8134,級別16,狀態1,行1

SELECT PUV.ProjectName, PUV.[Project ID], PUV.[Project Director], PUV.[Project Owner (Manager)], PUV.[Project Type1], **COALESCE(PUV.[Estimated Hours], 0) AS EstHours 
,PUV.ProjectStatusDate, PUV.ProjectStartDate, PUV.ProjectBaseline0StartDate, PUV.ProjectActualStartDate, PUV.ProjectStartVariance, PUV.ProjectBaseline0FinishDate 
,PUV.ProjectFinishDate, PUV.ProjectFinishVariance, PUV.ProjectActualFinishDate, PUV.ProjectWork, PUV.ProjectBaseline0Work, PUV.ProjectActualWork, PUV.ProjectWorkVariance, PUV.ProjectRemainingWork 
,PUV.[Project Phase], PUV.[Hold - Canceled Indicator], CWI.StageName, TB.TB_BASE_NUM, MAX (TB.CREATED_DATE) RecentBaseline 
,CASE WHEN PUV.[Estimated Hours] is null then 0 END AS [Estimated%] 
,Case When PUV.ProjectActualWork <> 0 THEN cast(COALESCE(PUV.ProjectActualWork,0) as DECIMAL(20,2))/Cast(COALESCE(PUV.[Estimated Hours],0)as decimal(20,2)) Else 0 End AS [Estimated%]* 
--DATEDIFF(day, PUV.ProjectBaseline0FinishDate, PUV.ProjectFinishDate) 
FROM MSP_EpmProject_UserView AS PUV 
LEFT OUTER JOIN (
    SELECT WSI.ProjectUID, WP.PhaseName, WP.PhaseUID, WS.StageName, WS.StageUID 
    FROM MSP_EpmWorkflowStage AS WS    
    INNER JOIN MSP_EpmWorkflowPhase AS WP ON WS.PhaseUID = WP.PhaseUID    
    INNER JOIN MSP_EpmWorkflowStatusInformation AS WSI ON WS.StageUID = WSI.StageUID AND WSI.StageEntryDate IS NOT NULL AND (WSI.StageStatus != 0 AND WSI.StageStatus != 4) 
    ) AS CWI ON PUV.ProjectUID = CWI.ProjectUID 
JOIN sps_ppm_IT_Published.dbo.MSP_TASK_BASELINES AS TB ON PUV.ProjectUID = TB.PROJ_UID 
WHERE TB.TB_BASE_NUM = 0 
GROUP BY PUV.ProjectName, PUV.[Project ID], PUV.[Project Director], PUV.[Project Owner (Manager)], PUV.[Project Type1], PUV.[Estimated Hours] 
,PUV.ProjectStatusDate, PUV.ProjectStartDate, PUV.ProjectBaseline0StartDate, PUV.ProjectActualStartDate, PUV.ProjectStartVariance, PUV.ProjectBaseline0FinishDate 
,PUV.ProjectFinishDate, PUV.ProjectFinishVariance, PUV.ProjectActualFinishDate, PUV.ProjectWork, PUV.ProjectBaseline0Work, PUV.ProjectActualWork, PUV.ProjectWorkVariance, PUV.ProjectRemainingWork 
,PUV.[Project Phase], PUV.[Hold - Canceled Indicator], CWI.StageName, TB.TB_BASE_NUM 
ORDER BY PUV.ProjectName 

回答

0

你的標題是完全無關的問題,並張貼超長,別名查詢從你的數據庫是不是一個偉大的方式來獲得幫助。

幸運的是,我很好奇,看看「msg-8134-level-16-state-1-line-1」是否是來自火星的一個祕密消息,我檢查了它。

無論如何,這裏有一個如何使用CASE聲明爲零,以避免分裂的一個小例子:

SELECT 
     CASE WHEN example.estimated_hours != 0 AND example.estimated_hours IS NOT NULL 
     THEN 100/example.estimated_hours 
     ELSE 0 END AS ratio 
FROM (
     SELECT estimated_hours 
     FROM (
       VALUES (0), (1), (NULL), (2), (3)) 
       AS mock_data (estimated_hours)) 
     AS example; 

你可以複製/粘貼到您的SQL終端並運行它看到的輸出:

ratio 
------- 
    0 
    100 
    0 
    50 
    33 
(5 rows)