2016-09-16 39 views
1

我一直在尝试根据不同的日期范围生成报告。但是我写的查询是将所有结果合并为一个。期待在4个日期范围内获得4个结果。不同日期范围的独立结果

PS:我是初学者。任何帮助,将不胜感激。

select 
    sum(case when IsBlank = 1 then 1 else 0 end) as BlankChats, 
    sum(case when LeadID > 0 then 1 else 0 end) as ConvertedChats, 
    sum(case when PickedUpBy != AssignedToAgent and AssignedToAgent > 0 and PickedUpBy > 0 then 1 else 0 end) as MissedChats, 
    sum(case when AssignedToAgent > 0 then 1 else 0 end) as AssignedChats, 
    sum(case when LeadType=1 then 1 else 0 end) as SalesLeads 
from 
    chats with (nolock) 
    left join leads on leads.id=chats.leadid 
where 
    (chats.createdon >= DATEADD(d,0,DATEDIFF(d,0,GETDATE())) and chats.createdOn <= DATEADD(MI, -1*30, GETDATE())) 
OR 
    (chats.CreatedOn >= DATEADD(d, -1, DATEDIFF(d, 0, GETDATE())) and chats.createdOn <= DATEADD(MI, -1*30, DATEADD(d, -1, GETDATE()))) 
OR 
    (chats.CreatedOn >= DATEADD(d, -7, DATEDIFF(d, 0, GETDATE())) and chats.createdOn <= DATEADD(MI, -1*30, DATEADD(d, -7, GETDATE()))) 
OR 
    (chats.CreatedOn >= DATEADD(d, -8, DATEDIFF(d, 0, GETDATE())) and chats.createdOn <= DATEADD(MI, -1*30, DATEADD(d, -8, GETDATE()))) 
+2

如果你想要4个结果集,你需要创建4个查询。而且,由于你只是在学习,你可能会考虑在你习惯使用它抛弃数据库之前摆脱那个nolock暗示。它比简单的肮脏的读取做得更危险。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

+1

请显示来自您的查询和预期结果的示例结果 – TheGameiswar

+0

您可能会发现将日期表添加到您的数据库很有用。您可以在该表格中包含一个列来分组。 –

回答

0

如果你想4行针对您的查询,您将需要一个case语句由case语句添加日期范围,以你的选择,然后组。然后,您应该为每个由您的案例创建的值获取一行 - 在这种情况下应该是您希望统计信息分割的日期范围。