zoukankan      html  css  js  c++  java
  • 交叉表.sql

    --示例

    --示例数据
    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

    --查询处理:
    select     case when grouping(b.Time)=1 then 'Total' else b.Time end,
        [Mon]=sum(case a.week when 1 then 1 else 0 end),
        [Tue]=sum(case a.week when 2 then 1 else 0 end),
        [Wed]=sum(case a.week when 3 then 1 else 0 end),
        [Thu]=sum(case a.week when 4 then 1 else 0 end),
        [Fri]=sum(case a.week when 5 then 1 else 0 end),
        [Sat]=sum(case a.week when 6 then 1 else 0 end),
        [Sun]=sum(case a.week when 0 then 1 else 0 end),
        [Total]=count(a.week)
    from(
        select Time=convert(char(5),dateadd(hour,-1,Time),108)
                --时间交界点是1am,所以减1小时,避免进行跨天处理
            ,week=(@@datefirst+datepart(weekday,Time)-1)%7
                --考虑@@datefirst对datepart的影响
        from tb
    )a right join(
        select id=1,a='16:00',b='19:59',Time='[5pm - 9pm)' union all
        select id=2,a='20:00',b='23:59',Time='[9pm - 1am)' union all
        select id=3,a='00:00',b='02:59',Time='[1am - 4am)' union all
        select id=4,a='03:00',b='07:29',Time='[4am - 8:30am)' union all
        select id=5,a='07:30',b='11:59',Time='[8:30am - 1pm)' union all
        select id=6,a='12:00',b='15:59',Time='[1pm - 5pm)'
    )b on a.Time>=b.a and a.Time<b.b
    group by b.id,b.Time with rollup
    having grouping(b.Time)=0 or grouping(b.id)=1
    go

    --删除测试
    drop table tb

    /*--测试结果

                   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

    (所影响的行数为 7 行)
    --*/
  • 相关阅读:
    国外摄影网站
    网络基础之子网划分
    Java-多线程第三篇3种创建的线程方式、线程的生命周期、线程控制、线程同步、线程通信
    Java-多线程第二篇多线程相关认识(2)
    设计模式-第八篇之桥接模式
    设计模式-第七篇之门面模式
    设计模式-第六篇之策略模式
    设计模式-第五篇之命令模式
    设计模式-第四篇之代理模式
    设计模式-第九篇之观察者模式
  • 原文地址:https://www.cnblogs.com/shihao/p/2506516.html
Copyright © 2011-2022 走看看