在SQL中添加具有不同条件的另一列

在SQL中添加具有不同条件的另一列,sql,conditional-statements,getdate,Sql,Conditional Statements,Getdate,我试图在同一个查询中查找有关我的数据的不同信息。我想根据不同的条件创建新列。这是我的桌子现在的样子 SELECT COUNT (distinct ext_project_id) as "Total Projects" FROM dbo.v_report_project INNER JOIN dbo.v_report_program ON dbo.v_report_program.program_id = dbo.v_report_project.program_id W

我试图在同一个查询中查找有关我的数据的不同信息。我想根据不同的条件创建新列。这是我的桌子现在的样子

 SELECT COUNT (distinct ext_project_id) as "Total Projects"
   FROM dbo.v_report_project
  INNER JOIN dbo.v_report_program
     ON dbo.v_report_program.program_id = dbo.v_report_project.program_id
  WHERE project_status = 'Active'
    AND datediff (day, creation_date, getdate()) < 15 ;
我希望我的桌子是这样的:

Total Projects | Projects Under 15 Days | Projects Between 15 and 60 Days | Projects     Over 60 Days
163                     ??                           ??                             ??
如何同时找到这些不同的计数?

您可以使用案例将特定计数限制在特定的日期范围内:

select  count(distinct project_id) as total
,       count(distinct case 
            when datediff(day, creation_date, getdate()) < 6
            then project_id end) as total_6day
,       count(distinct case 
            when datediff(day, creation_date, getdate()) < 7
            then project_id end) as total_7day
,       count(distinct case 
            when datediff(day, creation_date, getdate()) < 42 
            then project_id end) as total_42day
from    dbo.v_report_project proj
join    dbo.v_report_program prog
on      proj.program_id = prog.program_id
where   project_status = 'Active'
如果匹配时为“否”,并且未指定“其他”,则案例将返回null。因为count忽略null,所以可以得到正确的小计

select  count(distinct project_id) as total
,       count(distinct case 
            when datediff(day, creation_date, getdate()) < 6
            then project_id end) as total_6day
,       count(distinct case 
            when datediff(day, creation_date, getdate()) < 7
            then project_id end) as total_7day
,       count(distinct case 
            when datediff(day, creation_date, getdate()) < 42 
            then project_id end) as total_42day
from    dbo.v_report_project proj
join    dbo.v_report_program prog
on      proj.program_id = prog.program_id
where   project_status = 'Active'