求一条复杂的sql语句(也可以通过其它方式实现这个功能、比如用N条sql语句进行查询得到结果最后整合)
时间:2011-12-07
来源:互联网
我想通过一条sql语句,统计出 “每个名字、每一天 的本地数量 和非本地数量。”
这样说您可能有些糊涂。举个例子,就像如下两个表,我的目标是将原始数据表中的信息统计为目标表那个样子。
原始数据表
HTML code
时间 名字 是否本地
今天上午 张三 true
今天下午 张三 false
昨天上午 张三 true
昨天下午 张三 true
前天上午 张三 false
前天中午 张三 true
前天下午 张三 false
今天上午 李四 true
今天中午 李四 false
今天下午 李四 false
昨天上午 李四 false
昨天中午 李四 true
昨天下午 李四 true
前天上午 李四 false
前天中午 李四 true
前天下午 李四 false
=============>
目标数据
HTML code
时间 名字 本地数量 非本地数量 咨询总数
今天 张三 1 1 2
昨天 张三 2 0 2
前天 张三 1 2 3
今天 李四 1 2 3
昨天 李四 2 1 3
前天 李四 1 2 3
注1:“时间”列为标准的datetime类型的列(日月年时分秒),写成昨天今天明天是方便大家理解
注2:“是否本地”列是bit类型,也就是程序中的bool类型。
注3:目标表统计的时间顺序为倒叙(就像上述目标表那个样子->从上到下是今天、昨天、前天。切勿反过来,因为用户更希望先看到最新日期的)。
作者: ximomomoxinei5 发布时间: 2011-12-07
select ...,
sum(case when...),
sum(case when ...),
sum(case when ...)
from tb
group by ...
作者: geniuswjt 发布时间: 2011-12-07
select convert(varchar(10),时间,120),名字, 本地数量=sum(case when 是否本地='是' then 1 else 0 end), 非本地数量=sum(case when 是否本地='否' then 1 else 0 end), 咨询总数=count(*) from tb group by convert(varchar(10),时间,120),名字 order by 2,1 desc
作者: ssp2009 发布时间: 2011-12-07
select convert(varchar(10),时间,120),名字, 本地数量=sum(case when 是否本地='true' then 1 else 0 end), 非本地数量=sum(case when 是否本地='false' then 1 else 0 end), 咨询总数=count(*) from tb group by convert(varchar(10),时间,120),名字 order by 名字,convert(varchar(10),时间,120) desc
作者: ssp2009 发布时间: 2011-12-07
select convert(varchar(10),时间,120),名字, sum(case when 是否本地='true' then 1 else 0 end) as 本地数量, sum(case when 是否本地='false' then 1 else 0 end) as 非本地数量, count(1) as 咨询总数 from tb group by convert(varchar(10),时间,120),名字 order by 名字,convert(varchar(10),时间,120) desc
作者: fredrickhu 发布时间: 2011-12-07
SELECT CONVERT(VARCHAR(10),时间列,120) AS 日期,名字, SUM(是否本地*1) AS 本地数量, SUM(1-是否本地*1) AS 非本地数量, COUNT(1) AS 咨询总数 FROM table1 WHERE DATEDIFF(d,时间列,GETDATE())<=2 GROUP BY CONVERT(VARCHAR(10),时间列,120) ORDER BY 名字,日期
作者: roy_88 发布时间: 2011-12-07
create table tb(时间 datetime,名字 nvarchar(10),是否本地 bit) insert into tb select '2011-12-07 01:30','张三',1 insert into tb select '2011-12-07 21:30','张三',0 insert into tb select '2011-12-06 01:30','张三',1 insert into tb select '2011-12-06 21:30','张三',1 insert into tb select '2011-12-05 21:30','张三',0 insert into tb select '2011-12-05 21:30','张三',1 insert into tb select '2011-12-05 21:30','张三',0 insert into tb select '2011-12-07 21:30','李四',1 insert into tb select '2011-12-07 21:30','李四',0 insert into tb select '2011-12-06 21:30','李四',0 insert into tb select '2011-12-06 21:30','李四',0 insert into tb select '2011-12-06 21:30','李四',1 insert into tb select '2011-12-05 21:30','李四',1 insert into tb select '2011-12-05 21:30','李四',0 insert into tb select '2011-12-05 21:30','李四',1 insert into tb select '2011-12-05 21:30','李四',0 go select convert(varchar(10),时间,120)时间,名字, sum(case when 是否本地=1 then 1 else 0 end)本地数量, sum(case when 是否本地=1 then 0 else 1 end)非本地数量, count(*)咨询总数 from tb group by convert(varchar(10),时间,120),名字 order by 名字,1 desc /* 时间 名字 本地数量 非本地数量 咨询总数 ---------- ---------- ----------- ----------- ----------- 2011-12-07 李四 1 1 2 2011-12-06 李四 1 2 3 2011-12-05 李四 2 2 4 2011-12-07 张三 1 1 2 2011-12-06 张三 2 0 2 2011-12-05 张三 1 2 3 (6 行受影响) */ go drop table tb
作者: qianjin036a 发布时间: 2011-12-07
作者: ju523756055 发布时间: 2011-12-07
select convert(varchar(10),时间,120)时间,名字, sum(case when 是否本地=1 then 1 else 0 end)本地数量, sum(case when 是否本地=1 then 0 else 1 end)非本地数量, count(*)咨询总数 from tb group by convert(varchar(10),时间,120),名字 order by 名字,1 desc
作者: Beirut 发布时间: 2011-12-07
作者: fuxiyang 发布时间: 2011-12-07
SQL code
select convert(varchar(10),时间,120),名字,
本地数量=sum(case when 是否本地='是' then 1 else 0 end),
非本地数量=sum(case when 是否本地='否' then 1 else 0 end),
咨询总数=count(*)
from tb group b……
作者: szstephenzhou 发布时间: 2011-12-07
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28