在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'