⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 交叉表.sql

📁 很好的sql 文档,可能邦你成为sql 高手
💻 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 行)
--*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -