按日期分组sql

时间:2013-06-14 13:52:39

标签: sql sql-server-2008 ssrs-2008

我也试图按日期分组。我怎样才能做到这一点?我希望一组0-30另一组是31-60,最后一组是60+。我正在制作一个带SSRS的图形,需要水平轴为0-31,31-60和60+。我尝试将“THEN P_NUMBER END”作为Active_age添加到dateiff的末尾,但这不起作用。

SELECT COUNT(*) Assignment, Severity
FROM dashboard.dbo.SmTickets
WHERE Assignment IN('Crosby')
AND Severity IN(4)
AND datediff(day,Open_Time,GETDATE()) between 0 and 30 
group by Assignment, Severity
UNION 
SELECT COUNT(*) Assignment, Severity
FROM dashboard.dbo.SmTickets
WHERE Assignment IN('Crosby')
AND Severity IN(5)
AND datediff(day,Open_Time,GETDATE()) between 0 and 30 THEN P_NUMBER END) as Active_age
group by Assignment, Severity 
UNION 
SELECT COUNT(*) Assignment, Severity
FROM dashboard.dbo.SmTickets
WHERE Assignment IN('Crosby')
AND Severity IN(4)
AND datediff(day,Open_Time,GETDATE()) between 30.01 and 60
group by Assignment, Severity 
UNION
SELECT COUNT(*) Assignment, Severity
FROM dashboard.dbo.SmTickets
WHERE Assignment IN('Crosby')
AND Severity IN(5)
AND datediff(day,Open_Time,GETDATE()) between 30.01 and 60
group by Assignment, Severity 
UNION 
SELECT COUNT(*) Assignment, Severity
FROM dashboard.dbo.SmTickets
WHERE Assignment IN('Crosby')
AND Severity IN(4)
AND datediff(day,Open_Time,GETDATE()) > 60
group by Assignment, Severity 
UNION
SELECT COUNT(*) Assignment, Severity
FROM dashboard.dbo.SmTickets
WHERE Assignment IN('Crosby')
AND Severity IN(5)
AND datediff(day,Open_Time,GETDATE()) > 60
group by Assignment, Severity 

1 个答案:

答案 0 :(得分:1)

尝试类似

的内容
Select Assignment,Severity,[Days],Sum(NumberOfThingies) From
(
select Assignment,Severity,1 as NumberOfThingies, 
case when datediff(day,Open_Time,GETDATE) <= 30 Then '0 - 30'
case when datediff(day,Open_Time,GETDATE) <= 60 then '30 - 60'
else 'More than 60'
end as [Days]
FROM dashboard.dbo.SmTickets
Where Assignment in('Crosby') and Severity In (4,5)
) dummyname
Group By Assignment,Severity,[Days]