SQL 统计 字段 竖向转横向 (行转列)显示

在做一些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;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值