一道sql题,不知道有好解决方法没有?

原创 2007年09月26日 20:26:00

create table tb(ID int,Time datetime)
insert tb select 1,'2005/01/24 16:20'
union all select 2,'2005/01/23 22:45'
union all select 3,'2005/01/23 0:30'
union all select 4,'2005/01/21 4:28'
union all select 5,'2005/01/20 13:22'
union all select 6,'2005/01/19 20:30'
union all select 7,'2005/01/19 18:23'
union all select 8,'2005/01/18 9:14'
union all select 9,'2005/01/18 18:04'
go

要得到以下结果:

所選時段            Mon   Tue   Wed   Thu   Fri   Sat   Sun   Total
--------------         -----     -----   -----     -----  -----  ------ ----     ------
[5pm - 9pm)       0        1        2         0       0       0      0       3
[9pm - 1am)       0        0        0         0       0       0      2       2
[1am - 4am)       0        0        0         0       0       0      0       0
[4am - 8:30am) 0        0        0         0       1        0     0       1
[8:30am - 1pm) 0       1         0         0       0        0     0       1
[1pm - 5pm)      1        0         0        1       0        0     0       2
Total                   1         2        2        1        1        0     2       9

 

select y as '所过时段',
       mon=sum(isnull((case when x=2 then z end),0)),
       Tue=sum(isnull((case when x=3 then z end),0)),
       Wed=sum(isnull((case when x=4 then z end),0)),
       Thu=sum(isnull((case when x=5 then z end),0)),
       Fri=sum(isnull((case when x=6 then z end),0)),
       Six=sum(isnull((case when x=7 then z end),0)),
       Sun=sum(isnull((case when x=1 then z end),0)),
       Total=sum(z)
from
 (select x,y,count(*) z
   from
   (select x=DATEPART(dw,time),
        y=case
            when  DATEPART(hh,time)>=17 and DATEPART(hh,time)<21 then '[5pm - 9pm)'
            when  ((DATEPART(hh,time)>=4 and DATEPART(hh,time)<8) or (DATEPART(hh,time)=8 and DATEPART(n,time)<30)) then '[4am - 8:30am)'
            when  DATEPART(hh,time)<13 and DATEPART(hh,time)>8 or(DATEPART(hh,time)=8 and DATEPART(mi,time)>=30) then '[8:30am - 1pm)'
            when  DATEPART(hh,time)>=13 and DATEPART(hh,time)<17 then '[1pm - 5pm)'
            when  (DATEPART(hh,time)>=21 or DATEPART(hh,time)<1) then '[9pm - 1am)'
            when  DATEPART(hh,time)>=1 and DATEPART(hh,time)<4 then '[1am - 4am)'
         end
   from tb) b
 group by x,y) c
group by y
union all
select 'Total' as '所过时段',
       mon=(select count(*) from tb where DATEPART(dw,time)=2),
       Tue=(select count(*) from tb where DATEPART(dw,time)=3),
       Wed=(select count(*) from tb where DATEPART(dw,time)=4),
       Thu=(select count(*) from tb where DATEPART(dw,time)=5),
       Fri=(select count(*) from tb where DATEPART(dw,time)=6),
       Six=(select count(*) from tb where DATEPART(dw,time)=7),
       Sun=(select count(*) from tb where DATEPART(dw,time)=1),
       Total=(select count(*) from tb)

感觉以上的查询方法比较苯。

相关文章推荐

android ListView详解,你不知道的事 (后附焦点解决方法)

对于android开发者来说,ListView无疑是最为常见的一个控件之一,android系统给我们提供了一些ArrayAdapter(文字),SimpleAdapter(图文),CursorAdap...

安装SQL2008常见问题及解决方法

  • 2015年03月30日 22:09
  • 197KB
  • 下载

jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法

在JDBC中调用SQL Server中的存储过程时出现如下异常:  com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结...

SQL2005安装及常见问题解决方法

  • 2013年01月20日 22:40
  • 916KB
  • 下载

黑马程序员-一一道面试题的解决方法

---------------------- android培训、java培训、期待与您交流! ---------------------- 有时间看了看张孝祥老师的面试宝典,真是泄气,好多题都...
  • yeti_38
  • yeti_38
  • 2011年11月12日 11:47
  • 258

sql安装错误-解决方法

  • 2008年10月31日 16:18
  • 1KB
  • 下载

SQL Server2005 只有配置工具,而没有查询分析器、企业管理器的解决方法

在先安装了VS2008,再安装完SQL Server2005 后,发现在开始菜单中只有配置工具,安装的时候该选择的都选上了,感觉不对劲,那查询分析器和企业管理器跑哪里去了。网上百度了一下,遇到这个问题...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一道sql题,不知道有好解决方法没有?
举报原因:
原因补充:

(最多只允许输入30个字)