SQL的返回值为零,因此过滤器仍然存在

时间:2017-05-05 14:51:40

标签: sql sql-server

除了一件事之外,下面的查询效果很好。 我在我的最终用户报告中使用该列作为“WorkStream”作为过滤器。由于它是一个过滤器,无论查询是否返回任何内容,我都需要它 当然,我必须使用where子句作为查询中的过滤器,以便只返回某些任务。 麻烦的是,当我有一个没有任何task_Significance项目的工作流时,工作流将被删除,报告过滤器(工作流)不起作用。

我需要的是一个看起来像这样的表,但如果我有一个缺少的工作流,那么它会一直放“0”。但是,只有当工作流丢失时,它才会返回过滤器名称(因此报告将具有过滤器,并且只显示最终报告中过滤器下方的空表。

enter image description here

这是我的代码:

        SELECT
     p.[Workstream]
    ,T.[Task_Significance]
    ,COUNT(1) AS Total
    ,SUM(case when T.[TaskPercentCompleted] >= 100 then 1 else 0 end) AS Actual
    ,SUM(case when T.[TaskFinishDate] <= DATEADD(DAY, 8-DATEPART(DW, GETDATE()), Convert(date,getdate())) then 1 else 0 end) AS Planned
    FROM [psmado].[dbo].[MSP_EpmProject_UserView] as P
       join   [PSMADO].[dbo].[MSP_EpmTask_UserView] as T
      On T.[projectUID] = P.[projectUID]
    WHERE 
      [Task_Significance] IN('Application', 'Data', 'Interface', 'End User Compute', 'Network', 'Compute Package', 'Data Center', 'CREWS Sites', 'App Design Review', 'Infra Design Review')
    GROUP BY   p.[EnterpriseProjectTypeUID], p.[Workstream],T.[Task_Significance]       

有没有这样做?

1 个答案:

答案 0 :(得分:2)

使用left join并将where子句移至on子句。这将返回p.[Workstream]列表中的所有t.Task_Significancein()

如果没有匹配的null,您可以使用coalesce()isnull()替换t.Task_Significance的值。

select 
    p.[Workstream]
  , coalesce(T.[Task_Significance], 'none') as Task_Significance
  , count(1) as Total
  , sum(case when T.[TaskPercentCompleted] >= 100 then 1 else 0 end) as Actual
  , sum(case when T.[TaskFinishDate] 
      <= dateadd(day, 8 - datepart(dw, getdate()), Convert(date, getdate())) 
        then 1 else 0 end) as Planned
from [psmado].[dbo].[msp_EpmProject_UserView] as P
  left join [psmado].[dbo].[msp_EpmTask_UserView] as T 
    on T.[projectuid] = P.[projectuid] 
   and [Task_Significance] in ('Application', 'Data', 'Interface'
    , 'End User Compute', 'Network', 'Compute Package', 'Data Center'
    , 'crews Sites', 'App Design Review', 'Infra Design Review')
group by 
    p.[EnterpriseProjectTypeuid]
  , p.[Workstream]
  , T.[Task_Significance]