在做一些SQL统计时,为了更直观看到结果,并进行比较,需要把竖向表的部分统计字段转成横向显示。
原数据格式:
wbname newstime
------------------------------
潇湘晨报 直播报道
佛山日报后天
扬子晚报昨天
扬子晚报昨天
足球报 直播报道
足球报 直播报道
中山日报昨天
要统计成横向结构
wbname 昨天 直播报道 后天
------------------------------------------------------
潇湘晨报 0 1 0
佛山日报 0 0 1
扬子晚报 2 0 0
足球报 0 2 0
中山日报 1 0 0
数据库表的结构
Field Type
-------- -----------
id int(11)
wbname varchar(50)
newstime varchar(50)
测试数据(MySQL)
insert into `wb`(`id`,`wbname`,`newstime`) values
(1,'潇湘晨报','直播报道'),
(2,'佛山日报','后天'),
(3,'扬子晚报','昨天'),
(4,'扬子晚报','昨天'),
(5,'足球报','直播报道'),
(6,'足球报','直播报道'),
(7,'中山日报','昨天'),
(8,'中山日报','当天'),
(9,'中山日报','直播报道'),
(10,'钱江晚报','直播报道'),
(11,'南方日报','时间不详'),
(12,'广州日报','直播报道'),
(13,'中国经营报','时间不详'),
(14,'中国经营报','时间不详'),
(15,'中国经营报','上周'),
(16,'烟台日报传媒集团','时间不详'),
(17,'烟台日报传媒集团','其他'),
(18,'烟台日报传媒集团','上周'),
(19,'扬子晚报','时间不详'),
(20,'扬子晚报','上周'),
(21,'扬子晚报','时间不详'),
(22,'扬子晚报','时间不详'),
(23,'扬子晚报','当天'),
(24,'扬子晚报','时间不详'),
(25,'潇湘晨报','时间不详'),
(26,'足球报','直播报道'),
(27,'足球报','直播报道'),
(28,'潇湘晨报','其他'),
(29,'潇湘晨报','其他'),
(30,'足球报','直播报道'),
(31,'足球报','直播报道'),
(32,'足球报','直播报道'),
(33,'足球报','直播报道'),
(34,'足球报','直播报道'),
(35,'足球报','直播报道'),
(36,'潇湘晨报','当天'),
(37,'足球报','直播报道'),
(38,'潇湘晨报','直播报道'),
(39,'潇湘晨报','直播报道'),
(40,'潇湘晨报','直播报道'),
(41,'潇湘晨报','直播报道');
主角:SQL语句
select wbname
,sum(case when newstime='上周' then total else 0 end) as '上周'
,sum(case when newstime='昨天' then total else 0 end) as '昨天'
,sum(case when newstime='当天' then total else 0 end) as '当天'
,sum(case when newstime='直播报道' then total else 0 end) as '直播报道'
,sum(case when newstime='时间不详' then total else 0 end) as '时间不详'
,sum(case when newstime='其他' then total else 0 end) as '其他'
from (
select wbname,newstime,count(*) as total from wb group by wbname,newstime
as temp group by wbname;