2011-03-25 42 views
1

我需要写一个case语句帮助我写数据到两种不同的场景中。在Case语句中需要帮助写作

我有大约1000万行的数据,需要根据时间过滤数据。

如果数据是这样的:

有一个叫CALL列。它由通话时间组成(意味着通话时间)。

现在的情况是,如果呼叫在上午8点至中午12点(中午)之间应该属于一个类别,并且如果在下午12点至下午4点之后呼叫不在下方,则应该属于另一类别。

因此,它应该是这样的:

case 
when 
     call between (8am-12pm) then 'abc' 
when 
     call between (12pm- 4pm) then 'def' 
when 
     call after 4pm then it should comes under next day means next day morning 'abc' 

我知道可能是很简单,但我无法弄清楚。

这怎么办?

+1

您使用的是SQL Server 2008吗? – 2011-03-25 16:40:40

+0

是的,我只使用sql server 2008。 – Shahsra 2011-03-25 18:01:54

回答

5

如何:

case 
    when datepart(hour,[call]) < 8 then 'abc' 
    when datepart(hour,[call]) between 8 and 11 then 'abc' 
    when datepart(hour,[call]) between 12 and 15 then 'def' 
    when datepart(hour,[call]) >= 16 then 'abc' 
end 

显然,前两个子句可以合并,但我不知道你想和午夜和上午8点之间的调用做什么。

编辑 您没有指定在下午4点到晚上8点之间会发生什么,但您应该能够弄清楚它!

编辑更正了between条款(谢谢@Andriy)。 @Shahsra - 现在意味着正午的call值将变为'def',但是11:59会变为'abc'。当然你可以很容易地调整它,如果这不是你想要的。关键是datepart(hour,[call])是你需要根据你的条款。

+0

我很抱歉,我的坏......那应该在下午4点以后......感谢纠正我...... – Shahsra 2011-03-25 18:03:53

+0

第二个条件应该是“在8和11之间”,第三个在12和15之间,最后一个'> = 16'。 – 2011-03-25 19:11:10

+0

所以在第一个条件和最后一个条件为<8 and > 16去第二天8-12'abc'数据......但当我检查这个查询时,它显示了8-16之间的那些电话居住在同一天数据“ABC”不在第二天的数据.... – Shahsra 2011-03-25 19:15:27