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 行)
    --*/
  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/shihao/p/2506516.html
Copyright © 2011-2022 走看看